mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
49 lines
1 KiB
ObjectPascal
49 lines
1 KiB
ObjectPascal
|
|
unit pointerparser;
|
||
|
|
|
||
|
|
{$mode delphi}
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
Classes, SysUtils;
|
||
|
|
|
||
|
|
function getPointerAddress(address: ptruint; const offsets: array of integer; var hasError: boolean): ptruint;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
{$ifdef windows}
|
||
|
|
uses newkernelhandler, ProcessHandlerUnit;
|
||
|
|
{$endif}
|
||
|
|
|
||
|
|
{$ifdef unix}
|
||
|
|
uses unixporthelper, newkernelhandler, ProcessHandlerUnit;
|
||
|
|
{$endif}
|
||
|
|
|
||
|
|
function getPointerAddress(address: ptruint; const offsets: array of integer; var hasError: boolean): ptruint;
|
||
|
|
var realaddress, realaddress2: PtrUInt;
|
||
|
|
count: PtrUInt;
|
||
|
|
check: boolean;
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
realaddress2:=address;
|
||
|
|
for i:=length(offsets)-1 downto 0 do
|
||
|
|
begin
|
||
|
|
realaddress:=0;
|
||
|
|
check:=readprocessmemory(processhandle,pointer(realaddress2),@realaddress,processhandler.pointersize,count);
|
||
|
|
if check and (count=processhandler.pointersize) then
|
||
|
|
realaddress2:=realaddress+offsets[i]
|
||
|
|
else
|
||
|
|
begin
|
||
|
|
result:=0;
|
||
|
|
|
||
|
|
exit;
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
result:=realAddress2;
|
||
|
|
hasError:=false;
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|
||
|
|
|