1 Star 0 Fork 0

phy0292/cheat-engine

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
unixporthelper.pas 8.63 KB
一键复制 编辑 原始数据 按行查看 历史
cheat-engine 提交于 2019-12-20 00:49 +08:00 . Fix registry issues
unit unixporthelper;
//
{$mode delphi}
interface
uses
Classes, SysUtils{$ifdef android},log{$endif}, BaseUnix;
//just fill in some basic info. Most of it won't be used for jni. It's mostly for some structures and function declaration/pointers
type
TColor = DWord;
PByteArray = ^TByteArray;
TByteArray = Array[0..{$ifdef CPU16}32766{$else}32767{$endif}] of Byte;
PWordarray = ^TWordArray;
TWordArray = array[0..{$ifdef CPU16}16382{$else}16383{$endif}] of Word;
TLargeInteger=QWORD;
PUINT64=^UInt64;
ULONG_PTR=ptruint;
ULONG64=qword;
ULONG32=dword;
LONG=integer;
ULONG=DWORD;
pint=^integer;
dword64=UInt64;
PDWORD64=^dword64;
LONG64=UInt64;
PVOID=pointer;
LPBYTE=^BYTE;
LPVOID=pointer;
SIZE_T=integer;
LPLPVOID=^pointer;
WINBOOL=boolean;
BOOL=boolean;
PBOOL=^BOOL;
PSTR=pchar;
LPSTR=pchar;
LPTSTR=pwidechar;
TCHAR=WCHAR;
PWCHAR=^WCHAR;
HANDLE=integer;
HDC=HANDLE;
HWND=HANDLE;
HICON=HANDLE;
HMODULE=HANDLE;
PHMODULE=^HMODULE;
UINT=UInt32;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION=pointer;
TFNThreadStartRoutine=pointer;
TThreadEntry32=record end;
THeapList32=record end;
TDebugEvent=record end;
TFloatingSaveArea=record end;
TMemoryBasicInformation=record
BaseAddress: PVOID;
AllocationBase: PVOID;
AllocationProtect: ULONG;
RegionSize: ULONG;
State: ULONG;
Protect: ULONG;
_Type: ULONG;
end;
PMemoryBasicInformation=^TMemoryBasicInformation;
_MEMORYSTATUS=record end;
//ce classes not implemented yet, but globally accessed
TCustomProgressBar=class(Tobject)
private
public
position: integer;
end;
TListViewItem=class(TObject)
private
public
index: integer;
procedure MakeVisible(s: boolean);
end;
TListViewItems=class(TStrings)
public
count: integer;
function getItem(index: integer): TListViewItem;
published
property item[index:integer]: TListViewItem read getItem; default;
end;
TListView=class(TObject)
private
public
itemindex: integer;
items: TListViewItems;
topitem: TListViewItem;
VisibleRowCount: integer;
ownerdata: boolean;
procedure Refresh;
procedure clear;
constructor create(aowner: TObject);
destructor destroy; override;
published
end;
const
MAX_PATH=256;
MAX_MODULE_NAME32=256;
CONTEXT_i386=$10000;
PAGE_READONLY = 2;
PAGE_READWRITE = 4;
PAGE_WRITECOPY = 8;
PAGE_EXECUTE = 16;
PAGE_EXECUTE_READ = 32;
PAGE_EXECUTE_READWRITE = 64;
PAGE_EXECUTE_WRITECOPY = 128;
PAGE_GUARD = 256;
PAGE_NOACCESS = 1;
PAGE_NOCACHE = 512;
MEM_COMMIT = 4096;
MEM_FREE = 65536;
MEM_RESERVE = 8192;
MEM_IMAGE = 16777216;
MEM_MAPPED = 262144;
MEM_PRIVATE = 131072;
MEM_DECOMMIT = 16384;
MEM_RELEASE = 32768;
MEM_TOP_DOWN = 1048576;
MEM_RESET = $80000;
MEM_WRITE_WATCH = $200000;
MEM_PHYSICAL = $400000;
MEM_LARGE_PAGES = $20000000;
MEM_4MB_PAGES = dword($80000000);
INVALID_SOCKET = THandle(not(0));
INVALID_HANDLE_VALUE = -1;
TH32CS_SNAPHEAPLIST = $00000001;
TH32CS_SNAPPROCESS = $00000002;
TH32CS_SNAPTHREAD = $00000004;
TH32CS_SNAPMODULE = $00000008;
TH32CS_SNAPMODULE32 = 0;
TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or
TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
TH32CS_GETALLMODS = $80000000;
PROCESS_ALL_ACCESS = $1f0fff; //not really used
clWindowText=0;
{$ifdef ANDROID}
function GetTempDir: string;
var tempdirOverride: string;
{$endif}
function VirtualAlloc(lpAddress:LPVOID; dwSize:PTRUINT; flAllocationType:DWORD; flProtect:DWORD):LPVOID;
function VirtualFree(lpAddress:LPVOID; dwSize:PTRUINT; dwFreeType:DWORD):WINBOOL;
function CopyFile(source: string; destination: string; failifdestinationExists: boolean=false): boolean;
Function DirectoryExistsUTF8 (Const Directory : RawByteString) : Boolean;
Function CreateDirUTF8(Const NewDir : UnicodeString) : Boolean;
function GetCurrentProcessID: SizeUInt;
procedure ZeroMemory(destination: pointer; size: integer);
procedure CopyMemory(destination: pointer; Origin: pointer; size: integer);
procedure MoveMemory(destination: pointer; Origin: pointer; size: integer);
function QueryPerformanceFrequency(var tps: TLargeInteger): boolean;
function QueryPerformanceCounter(var currenttick: TLargeInteger): boolean;
procedure log(l: string);
function WinCPToUTF8(s: string): string;
function UTF8ToUTF16(s: string): widestring;
function UTF16ToUTF8(s: widestring): string;
{$ifndef cefuncproc}
//for now...
function InRangeX(const AValue, AMin, AMax: ptrUint): Boolean;inline;
function InRangeQ(const AValue, AMin, AMax: QWord): Boolean;inline;
{$endif}
implementation
function UTF16ToUTF8(s: widestring): string;
begin
result:=s;
end;
function UTF8ToUTF16(s: string): widestring;
begin
result:=s;
end;
function WinCPToUTF8(s: string): string;
begin
result:=AnsiToUtf8(s);
end;
function TListViewItems.getItem(index: integer): TListViewItem;
begin
result:=nil;
end;
procedure TListViewItem.MakeVisible(s: boolean);
begin
//
end;
procedure TListView.Refresh;
begin
//
end;
procedure TListView.clear;
begin
//
end;
constructor TListView.create(aowner: TObject);
begin
items:=TListViewItems.Create;
inherited create;
end;
destructor TListView.destroy;
begin
if items<>nil then
freeandnil(items);
inherited destroy;
end;
{$ifdef ANDROID}
function GetTempDir: string;
begin
result:=tempdirOverride;
end;
{$endif}
Function CreateDirUTF8(Const NewDir : UnicodeString) : Boolean;
begin
result:=false;
end;
Function DirectoryExistsUTF8 (Const Directory : RawByteString) : Boolean;
begin
result:=false;
end;
function CopyFile(source: string; destination: string; failifdestinationExists: boolean=false): boolean;
var src,dst: TFileStream;
begin
Log('CopyFile. source='+source+' destination='+destination+'Fail if exists'+ BoolToStr(failifdestinationExists, 'yes','no'));
result:=false;
try
src:=nil;
dst:=nil;
if not fileexists('"'+source+'"')=false then
begin
log('source does not exist');
exit;
end;
if failifdestinationExists and fileexists(destination) then
begin
log('failifdestinationExists is true and the destination exists');
exit;
end;
try
src:=tfilestream.create(source, fmOpenRead);
dst:=tfilestream.create(destination, fmCreate);
dst.CopyFrom(src,0); //copy the whole file
result:=true; //still here and no exception
log('Copy successful')
finally
if src<>nil then
freeandnil(src);
if dst<>nil then
freeandnil(dst);
end;
;
except
on e: exception do
log('Error during copy:'+e.message);
end;
end;
function VirtualFree(lpAddress:LPVOID; dwSize:PTRUINT; dwFreeType:DWORD):WINBOOL;
begin
Fpmunmap(lpAddress, dwSize);
end;
function VirtualAlloc(lpAddress:LPVOID; dwSize:PTRUINT; flAllocationType:DWORD; flProtect:DWORD):LPVOID;
var r: pointer;
begin
log('Calling VirtualAlloc');
result:=Fpmmap(lpAddress,dwsize, PROT_READ or PROT_WRITE or PROT_EXEC, MAP_PRIVATE or MAP_ANONYMOUS, 0,0 );
log('After calling VirtualAlloc. Result='+inttohex(ptruint(result),8));
end;
function InRangeX(const AValue, AMin, AMax: ptrUint): Boolean;inline;
begin
Result:=(AValue>=AMin) and (AValue<=AMax);
end;
function InRangeQ(const AValue, AMin, AMax: QWord): Boolean;inline;
begin
Result:=(AValue>=AMin) and (AValue<=AMax);
end;
function QueryPerformanceFrequency(var tps: TLargeInteger): boolean;
begin
tps:=1000;
result:=true;
end;
function QueryPerformanceCounter(var currenttick: TLargeInteger): boolean;
begin
currenttick:=GetTickCount64;
result:=true;
end;
procedure ZeroMemory(destination: pointer; size: integer);
begin
//log('ZeroMemory');
FillByte(destination^, size, 0); //perhaps filldword might be faster, but for now keep it compatible
//log('ZeroMemory returned');
end;
procedure MoveMemory(destination: pointer; Origin: pointer; size: integer);
begin
Move(Origin^, Destination^, size);
end;
procedure CopyMemory(destination: pointer; Origin: pointer; size: integer);
begin
MoveMemory(destination, origin, size);
end;
function GetCurrentProcessID: SizeUInt;
begin
result:=GetProcessID;
end;
procedure log(l: string);
begin
{$ifdef android}
__android_log_write(ANDROID_LOG_ERROR, 'CECORE',pchar(l));
{$endif}
{$ifdef windows}
Outputdebugstring(pchar(l));
{$endif}
end;
end.
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/phy0292/cheat-engine.git
git@gitee.com:phy0292/cheat-engine.git
phy0292
cheat-engine
cheat-engine
master

搜索帮助