forked from cheat-engine/cheat-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDebuggerInterfaceAPIWrapper.pas
94 lines (75 loc) · 3.29 KB
/
DebuggerInterfaceAPIWrapper.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
unit DebuggerInterfaceAPIWrapper;
{
This unit hold the DebuggerInterface currently used, and overrides the default windows debug api's so they make use of the DebuggerInterface's version
}
{$mode delphi}
interface
uses
Classes, SysUtils, {$ifdef windows}windows,{$endif} debuggerinterface, newkernelhandler{$ifdef darwin}, macport{$endif};
function WaitForDebugEvent(var lpDebugEvent: TDebugEvent; dwMilliseconds: DWORD): BOOL;
function ContinueDebugEvent(dwProcessId: DWORD; dwThreadId: DWORD; dwContinueStatus: DWORD): BOOL;
function SetThreadContext(hThread: THandle; const lpContext: TContext; isFrozenThread: Boolean=false): BOOL;
function GetThreadContext(hThread: THandle; var lpContext: TContext; isFrozenThread: Boolean=false): BOOL;
function GetThreadContextArm(hThread: THandle; var lpContext: TARMCONTEXT; isFrozenThread: Boolean=false): BOOL;
function DebugActiveProcess(dwProcessId: DWORD): WINBOOL;
function DebugActiveProcessStop(dwProcessID: DWORD): WINBOOL;
var CurrentDebuggerInterface: TDebuggerInterface;
implementation
uses CEDebugger;
function WaitForDebugEvent(var lpDebugEvent: TDebugEvent; dwMilliseconds: DWORD): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.WaitForDebugEvent(lpDebugEvent, dwMilliseconds)
else
result:=false;
end;
function ContinueDebugEvent(dwProcessId: DWORD; dwThreadId: DWORD; dwContinueStatus: DWORD): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.ContinueDebugEvent(dwProcessID, dwThreadID, dwContinueStatus)
else
result:=false;
end;
function SetThreadContext(hThread: THandle; const lpContext: TContext; isFrozenThread: Boolean=false): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.SetThreadContext(hThread, lpContext, isFrozenThread)
else
result:=NewKernelHandler.SetThreadContext(hThread, lpcontext);
end;
function SetThreadContextArm(hThread: THandle; const lpContext: TArmContext; isFrozenThread: Boolean=false): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.SetThreadContextArm(hThread, lpContext, isFrozenThread)
else
result:=false;
end;
function GetThreadContext(hThread: THandle; var lpContext: TContext; isFrozenThread: Boolean=false): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.GetThreadContext(hThread, lpContext, isFrozenThread)
else
result:=NewKernelHandler.GetThreadContext(hThread, lpContext);
end;
function GetThreadContextArm(hThread: THandle; var lpContext: TARMCONTEXT; isFrozenThread: Boolean=false): BOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.GetThreadContextArm(hThread, lpContext, isFrozenThread)
else
result:=false;
end;
function DebugActiveProcess(dwProcessId: DWORD): WINBOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.DebugActiveProcess(dwProcessID)
else
result:=false;
end;
function DebugActiveProcessStop(dwProcessID: DWORD): WINBOOL;
begin
if CurrentDebuggerInterface<>nil then
result:=CurrentDebuggerInterface.DebugActiveProcessStop(dwProcessID)
else
result:=cedebugger.DebugActiveProcessStop(dwProcessID);
end;
end.