-
Notifications
You must be signed in to change notification settings - Fork 51
/
DbgHookTypes.pas
125 lines (103 loc) · 2.75 KB
/
DbgHookTypes.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
unit DbgHookTypes;
interface
uses
WinApi.Windows;
const
DBG_EXCEPTION = $0EEDFFF0;
_EHOOK_GetCallStack = 1;
_EHOOK_GetObjClassType = 2;
DBG_STACK_LENGTH = 32;
type
TDbgInfoType = (
dstUnknown = 0,
dstThreadInfo,
dstMemInfo,
dstPerfomance,
dstPerfomanceAndInfo,
dstMemHookStatus,
dstSyncObjsInfo,
dstSampling
);
// Memory Info
TDbgMemInfoType = (miGetMem = 0, miFreeMem);
PDbgHookInfoStack = ^TDbgHookInfoStack;
TDbgHookInfoStack = array[0..(DBG_STACK_LENGTH - 1)] of Pointer;
TObjClassTypeName = array[0..(SizeOf(TDbgHookInfoStack) - 1)] of AnsiChar;
PDbgMemInfo = ^TDbgMemInfo;
TDbgMemInfo = packed record
Ptr: Pointer;
ThreadId: Cardinal;
case MemInfoType: TDbgMemInfoType of
miGetMem: (
Size: Cardinal;
Stack: TDbgHookInfoStack;
);
miFreeMem: (
ObjClassType: TObjClassTypeName;
);
end;
// SyncObjs
TDbgSyncObjsType = (
soUnknown = 0,
soSleep,
soWaitForSingleObject, soWaitForMultipleObjects,
soEnterCriticalSection, soLeaveCriticalSection, soInCriticalSection,
soSendMessage
);
TDbgSyncObjsStateType = (sosUnknown = 0, sosEnter, sosLeave);
PDbgSyncObjsInfo = ^TDbgSyncObjsInfo;
TDbgSyncObjsInfo = packed record
Id: NativeUInt;
ThreadId: Cardinal;
CurTime: Int64;
Stack: TDbgHookInfoStack;
SyncObjsStateType: TDbgSyncObjsStateType;
case SyncObjsType: TDbgSyncObjsType of
soUnknown:
();
soSleep:
(
MSec: NativeUInt;
);
soWaitForSingleObject:
(
Handle: THandle;
);
soWaitForMultipleObjects:
(
Handles: PWOHandleArray;
);
soEnterCriticalSection,
soLeaveCriticalSection,
soInCriticalSection:
(
CS: PRTLCriticalSection;
OwningThreadId: Cardinal;
);
soSendMessage:
(
Msg: UINT;
);
end;
const
_DbgMemListLength = ($FFFFF div SizeOf(TDbgMemInfo));
_DbgSyncObjsListLength = ($FFFFF div SizeOf(TDbgSyncObjsInfo));
type
PDbgMemInfoList = ^TDbgMemInfoList;
TDbgMemInfoList = array[0.._DbgMemListLength - 1] of TDbgMemInfo;
PDbgMemInfoListBuf = ^TDbgMemInfoListBuf;
TDbgMemInfoListBuf = record
Count: Integer;
DbgMemInfoList: PDbgMemInfoList;
DbgPointIdx: Integer;
end;
PDbgSyncObjsInfoList = ^TDbgSyncObjsInfoList;
TDbgSyncObjsInfoList = array[0.._DbgSyncObjsListLength - 1] of TDbgSyncObjsInfo;
PDbgSyncObjsInfoListBuf = ^TDbgSyncObjsInfoListBuf;
TDbgSyncObjsInfoListBuf = record
Count: Integer;
DbgSyncObjsInfoList: PDbgSyncObjsInfoList;
DbgPointIdx: Integer;
end;
implementation
end.