cheat-engine/Tutorial/Unit9.dfm
cheatengine@gmail.com 4d297adfd2
2011-07-04 19:52:19 +00:00

142 lines
4.1 KiB
Text

object Form9: TForm9
Left = 411
Top = 229
BorderStyle = bsDialog
Caption = 'Step 8'
ClientHeight = 308
ClientWidth = 703
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -14
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poOwnerFormCenter
Visible = True
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
PixelsPerInch = 120
TextHeight = 16
object Label1: TLabel
Left = 10
Top = 266
Width = 21
Height = 16
Caption = '100'
end
object Label2: TLabel
Left = 118
Top = 265
Width = 7
Height = 16
Caption = '3'
Visible = False
end
object SpeedButton1: TSpeedButton
Left = 670
Top = 286
Width = 30
Height = 20
Caption = 'Skip'
Flat = True
OnClick = SpeedButton1Click
end
object Memo1: TMemo
Left = 0
Top = 0
Width = 703
Height = 228
Align = alTop
Color = clBtnFace
Lines.Strings = (
'This step will explain how to use multi-level pointers.'
'In step 6 you had a simple level-1 pointer, with the first addre' +
'ss found already being the real base address.'
'This step however is a level-4 pointer. It has a pointer to a po' +
'inter to a pointer to a pointer to a pointer to the health.'
''
'You basicly do the same as in step 6. Find out what accesses the' +
' value, look at the instruction and what probably is '
'the base pointer value, and what is the offset, and already fill' +
' that in or write it down. But in this case the address '
'you'#39'll find will also be a pointer. You just have to find out th' +
'e pointer to that pointer exactly the same way as you did '
'with the value. Find out what accesses that address you found, l' +
'ook at the assembler instruction, note the probable '
'instruction and offset, and use that.'
'and continue till you can'#39't get any further (usually when the ba' +
'se address is a static address, shown up as green)'
''
'Click Change Value to let the tutorial access the health.'
'If you think you'#39've found the pointer path click Change Register' +
'. The pointers and value will then change and you'#39'll '
'have 3 seconds to freeze the address to 5000'
''
'Extra: This problem can also be solved using a auto assembler sc' +
'ript, or using the pointer scanner'
'Extra2: In some situations it is recommended to change ce'#39's code' +
'finder settings to Access violations when '
'encountering instructions like mov eax,[eax] since debugregister' +
's show it AFTER it was changed, making it hard to '
'find out the the value of the pointer'
''
''
''
''
''
'Extra3: If you'#39're still reading. You might notice that when look' +
'ing at the assembler instructions that the pointer is '
'being read and filled out in the same codeblock (same routine, i' +
'f you know assembler, look up till the start of the '
'routine). This doesn'#39't always happen, but can be really useful i' +
'n finding a '
'pointer when debugging is troublesome')
ReadOnly = True
ScrollBars = ssVertical
TabOrder = 0
end
object Button2: TButton
Left = 305
Top = 236
Width = 93
Height = 31
Caption = 'Next'
Enabled = False
TabOrder = 1
OnClick = Button2Click
end
object Button1: TButton
Left = 10
Top = 281
Width = 100
Height = 23
Caption = 'Change value'
TabOrder = 2
OnClick = Button1Click
end
object Button3: TButton
Left = 114
Top = 281
Width = 100
Height = 23
Caption = 'Change pointer'
TabOrder = 3
OnClick = Button3Click
end
end