add SelectionSize to disassembler view
script templates now take the selection into account for minimum originalcode size
This commit is contained in:
parent
3d9574ed9c
commit
df50882b23
@ -2537,6 +2537,7 @@ Disassemblerview class: (Inheritance: Panel->CustomControl->WinControl->Control-
|
||||
properties
|
||||
SelectedAddress: integer - The currently selected address in the disassemblerview
|
||||
SelectedAddress2: integer - The secondary selected address in the disassemblerview
|
||||
SelectionSize: integer - The size of the selected area
|
||||
TopAddress: Integer - The first address to show
|
||||
ShowJumplines: boolean - Determines if the jumplines should be shown
|
||||
HideFocusRect: boolean - If set to true the focus rectangle won't be shown
|
||||
|
@ -27,7 +27,7 @@
|
||||
<AutoIncrementBuild Value="True"/>
|
||||
<MajorVersionNr Value="7"/>
|
||||
<MinorVersionNr Value="5"/>
|
||||
<BuildNr Value="7684"/>
|
||||
<BuildNr Value="7690"/>
|
||||
<Language Value="041C"/>
|
||||
<CharSet Value="04B0"/>
|
||||
<StringTable CompanyName="Cheat Engine" FileDescription="Cheat Engine" ProductVersion="7.5"/>
|
||||
|
@ -136,6 +136,10 @@ type TDisassemblerview=class(TPanel)
|
||||
procedure StatusInfoLabelCopy(sender: TObject);
|
||||
|
||||
procedure setCR3(pa: QWORD);
|
||||
|
||||
function getSelectionSize: integer;
|
||||
procedure setSelectionSize(s: integer);
|
||||
|
||||
protected
|
||||
backlist: TStack;
|
||||
goingback: boolean;
|
||||
@ -211,6 +215,7 @@ type TDisassemblerview=class(TPanel)
|
||||
property OnDisassemblerViewOverride: TDisassemblerViewOverrideCallback read fOnDisassemblerViewOverride write fOnDisassemblerViewOverride;
|
||||
property CR3: qword read fCR3 write setCR3;
|
||||
property CurrentDisassembler: TDisassembler read fCurrentDisassembler;
|
||||
property SelectionSize: integer read getSelectionSize write setSelectionSize;
|
||||
|
||||
property RelativeBase: ptruint read fRelativeBase write fRelativeBase;
|
||||
property UseRelativeBase: boolean read fUseRelativeBase write fUseRelativeBase;
|
||||
@ -392,6 +397,44 @@ begin
|
||||
update;
|
||||
end;
|
||||
|
||||
function TDisassemblerview.getSelectionSize: integer;
|
||||
var
|
||||
lastaddr: ptruint;
|
||||
d: TDisassembler;
|
||||
begin
|
||||
d:=TDisassembler.create;
|
||||
lastaddr:=max(fSelectedAddress2, fSelectedAddress);
|
||||
d.disassemble(lastaddr);
|
||||
d.free;
|
||||
|
||||
result:=lastaddr-min(fSelectedAddress2, fSelectedAddress);
|
||||
end;
|
||||
|
||||
procedure TDisassemblerview.setSelectionSize(s: integer);
|
||||
var
|
||||
first: ptruint;
|
||||
last: ptruint;
|
||||
current: ptruint;
|
||||
stop: ptruint;
|
||||
d: TDisassembler;
|
||||
begin
|
||||
first:=min(fSelectedAddress2, fSelectedAddress);
|
||||
fselectedaddress:=first;
|
||||
|
||||
current:=first;
|
||||
stop:=first+s;
|
||||
|
||||
d:=TDisassembler.create;
|
||||
while current<stop do
|
||||
begin
|
||||
fselectedaddress2:=current;
|
||||
d.disassemble(current);
|
||||
end;
|
||||
d.free;
|
||||
|
||||
update;
|
||||
end;
|
||||
|
||||
procedure TDisassemblerview.GoBack;
|
||||
begin
|
||||
if hasBackList then
|
||||
|
@ -391,9 +391,9 @@ type
|
||||
|
||||
|
||||
procedure generateAPIHookScript(script: tstrings; address: string; addresstogoto: string; addresstostoreneworiginalfunction: string=''; nameextension:string='0'; targetself: boolean=false);
|
||||
procedure GenerateCodeInjectionScript(script: tstrings; addressstring: string; farjmp: boolean=false; jmp1:boolean=false);
|
||||
procedure GenerateAOBInjectionScript(script: TStrings; address: string; symbolname: string; commentradius: integer=10; farjmp: boolean=false; jmp1: boolean=false);
|
||||
procedure GenerateFullInjectionScript(Script: tstrings; address: string; commentradius: integer=10; farjmp: boolean=false; jmp1: boolean=false);
|
||||
procedure GenerateCodeInjectionScript(script: tstrings; addressstring: string; farjmp: boolean=false; jmp1:boolean=false; originalcodeMinSize: integer=1);
|
||||
procedure GenerateAOBInjectionScript(script: TStrings; address: string; symbolname: string; commentradius: integer=10; farjmp: boolean=false; jmp1: boolean=false; originalcodeMinSize: integer=1);
|
||||
procedure GenerateFullInjectionScript(Script: tstrings; address: string; commentradius: integer=10; farjmp: boolean=false; jmp1: boolean=false; originalcodeMinSize: integer=1);
|
||||
|
||||
function registerAutoAssemblerTemplate(name: string; m: TAutoAssemblerTemplateCallback; shortcut: TShortCut=0): integer;
|
||||
procedure unregisterAutoAssemblerTemplate(id: integer);
|
||||
@ -1276,7 +1276,7 @@ begin
|
||||
d.free;
|
||||
end;
|
||||
|
||||
procedure GenerateCodeInjectionScript(script: tstrings; addressstring: string; farjmp: boolean=false; jmp1: boolean=false);
|
||||
procedure GenerateCodeInjectionScript(script: tstrings; addressstring: string; farjmp: boolean=false; jmp1: boolean=false; originalcodeMinSize: integer=1);
|
||||
function inttostr(i:int64):string;
|
||||
begin
|
||||
if i=0 then result:='' else result:=sysutils.IntToStr(i);
|
||||
@ -1301,7 +1301,6 @@ var
|
||||
jmpsize: integer;
|
||||
|
||||
rewrite: tstringlist;
|
||||
|
||||
begin
|
||||
|
||||
if not processhandler.is64Bit then
|
||||
@ -1331,7 +1330,10 @@ begin
|
||||
enablecode:=tstringlist.Create;
|
||||
disablecode:=tstringlist.Create;
|
||||
|
||||
while codesize<jmpsize do
|
||||
if originalcodeMinSize<jmpsize then
|
||||
originalcodeMinSize:=jmpsize;
|
||||
|
||||
while codesize<originalcodeMinSize do
|
||||
begin
|
||||
GetOriginalInstruction(c, originalcode, farjmp);
|
||||
codesize:=c-a;
|
||||
@ -1442,11 +1444,18 @@ var
|
||||
a: ptruint;
|
||||
mi: TModuleInfo;
|
||||
address: string;
|
||||
originalCodeMinSize: integer;
|
||||
begin
|
||||
if parent is TMemoryBrowser then
|
||||
a:=TMemoryBrowser(parent).disassemblerview.SelectedAddress
|
||||
begin
|
||||
a:=min(TMemoryBrowser(parent).disassemblerview.SelectedAddress, TMemoryBrowser(parent).disassemblerview.SelectedAddress2);
|
||||
originalCodeMinSize:=TMemoryBrowser(parent).disassemblerview.selectionsize;
|
||||
end
|
||||
else
|
||||
a:=memorybrowser.disassemblerview.SelectedAddress;
|
||||
begin
|
||||
a:=min(memorybrowser.disassemblerview.SelectedAddress, memorybrowser.disassemblerview.SelectedAddress2);
|
||||
originalCodeMinSize:=memorybrowser.disassemblerview.selectionsize;
|
||||
end;
|
||||
|
||||
if symhandler.getmodulebyaddress(a,mi) then
|
||||
address:='"'+mi.modulename+'"+'+inttohex(a-mi.baseaddress,1)
|
||||
@ -1458,7 +1467,9 @@ begin
|
||||
|
||||
|
||||
if inputquery(rsCodeInjectTemplate, rsOnWhatAddressDoYouWantTheJump, address) then
|
||||
GenerateCodeInjectionScript(assemblescreen.lines, address, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked);
|
||||
begin
|
||||
GenerateCodeInjectionScript(assemblescreen.lines, address, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked, originalCodeMinSize);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmAutoInject.Panel1Resize(Sender: TObject);
|
||||
@ -3162,7 +3173,7 @@ begin
|
||||
end;
|
||||
|
||||
// \/ http://forum.cheatengine.org/viewtopic.php?t=566415 (jgoemat and some mods by db)
|
||||
procedure GenerateFullInjectionScript(Script: tstrings; address: string; commentRadius: integer=10; farjmp: boolean=false; jmp1:boolean=false);
|
||||
procedure GenerateFullInjectionScript(Script: tstrings; address: string; commentRadius: integer=10; farjmp: boolean=false; jmp1:boolean=false; originalcodeMinSize: integer=1);
|
||||
var
|
||||
originalcode: tstringlist;
|
||||
originalbytes: array of byte;
|
||||
@ -3227,7 +3238,10 @@ begin
|
||||
originalcode:=tstringlist.create;
|
||||
codesize:=0;
|
||||
|
||||
while codesize<jmpsize do
|
||||
if originalcodeMinSize<jmpsize then
|
||||
originalcodeMinSize:=jmpsize;
|
||||
|
||||
while codesize<originalcodeMinSize do
|
||||
begin
|
||||
GetOriginalInstruction(c, originalcode, farjmp);
|
||||
codesize:=c-a;
|
||||
@ -3388,7 +3402,7 @@ var
|
||||
address: string;
|
||||
mi: TModuleInfo;
|
||||
begin
|
||||
a:=memorybrowser.disassemblerview.SelectedAddress;
|
||||
a:=min(memorybrowser.disassemblerview.SelectedAddress, memorybrowser.disassemblerview.SelectedAddress2);
|
||||
|
||||
if symhandler.getmodulebyaddress(a,mi) then
|
||||
address:='"'+mi.modulename+'"+'+inttohex(a-mi.baseaddress,1)
|
||||
@ -3399,7 +3413,7 @@ begin
|
||||
mi14ByteJMP.Checked:=true;
|
||||
|
||||
if inputquery(rsCodeInjectTemplate, rsOnWhatAddressDoYouWantTheJump, address) then
|
||||
generateFullInjectionScript(assemblescreen.Lines, address, 10, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked);
|
||||
generateFullInjectionScript(assemblescreen.Lines, address, 10, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked, memorybrowser.disassemblerview.SelectionSize);
|
||||
end;
|
||||
|
||||
procedure TfrmAutoInject.miReplaceClick(Sender: TObject);
|
||||
@ -3480,7 +3494,7 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure GenerateAOBInjectionScript(script: TStrings; address: string; symbolname: string; commentradius: integer=10; farjmp: boolean=false; jmp1:boolean=false);
|
||||
procedure GenerateAOBInjectionScript(script: TStrings; address: string; symbolname: string; commentradius: integer=10; farjmp: boolean=false; jmp1:boolean=false; originalcodeMinSize: integer=1);
|
||||
var
|
||||
a,a2: ptrUint; // pointer to injection point
|
||||
originalcode: tstringlist; // disassembled code we're replacing
|
||||
@ -3552,7 +3566,10 @@ begin
|
||||
originalcode:=tstringlist.create;
|
||||
codesize:=0;
|
||||
|
||||
while codesize<jmpsize do
|
||||
if originalcodeMinSize<jmpsize then
|
||||
originalcodeMinSize:=jmpsize;
|
||||
|
||||
while codesize<originalcodeMinSize do
|
||||
begin
|
||||
GetOriginalInstruction(c, originalcode, farjmp);
|
||||
codesize:=c-a;
|
||||
@ -3722,7 +3739,7 @@ var
|
||||
mi: TModuleInfo;
|
||||
symbolname: string;
|
||||
begin
|
||||
a:=memorybrowser.disassemblerview.SelectedAddress;
|
||||
a:=min(memorybrowser.disassemblerview.SelectedAddress, memorybrowser.disassemblerview.SelectedAddress2);
|
||||
|
||||
if symhandler.getmodulebyaddress(a,mi) then
|
||||
address:='"'+mi.modulename+'"+'+inttohex(a-mi.baseaddress,1)
|
||||
@ -3741,7 +3758,7 @@ begin
|
||||
symbolname:='INJECT'+nr;
|
||||
|
||||
if inputquery(rsCodeInjectTemplate, rsWhatIdentifierDoYouWantToUse, symbolName) then
|
||||
GenerateAOBInjectionScript(assemblescreen.Lines, address, symbolname, 10, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked);
|
||||
GenerateAOBInjectionScript(assemblescreen.Lines, address, symbolname, 10, (ssCtrl in GetKeyShiftState) or mi14ByteJMP.checked, mi1ByteExceptionJMP.checked, memorybrowser.disassemblerview.SelectionSize);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user