4 /* INCLUDES ******************************************************************/
6 #define NTOS_MODE_KERNEL
9 #include <internal/ke.h>
11 /* DEFINES *******************************************************************/
13 #define TAG_KDBG (('K' << 24) | ('D' << 16) | ('B' << 8) | 'G')
16 # define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
20 /* TYPES *********************************************************************/
23 typedef struct _KDB_KTRAP_FRAME
27 ULONG Cr1
; /* reserved/unused */
31 } KDB_KTRAP_FRAME
, *PKDB_KTRAP_FRAME
;
33 typedef enum _KDB_BREAKPOINT_TYPE
35 KdbBreakPointNone
= 0,
36 KdbBreakPointSoftware
,
37 KdbBreakPointHardware
,
38 KdbBreakPointTemporary
39 } KDB_BREAKPOINT_TYPE
;
41 typedef enum _KDB_ACCESS_TYPE
49 typedef struct _KDB_BREAKPOINT
51 KDB_BREAKPOINT_TYPE Type
; /* Type of breakpoint */
52 BOOLEAN Enabled
; /* Whether the bp is enabled */
53 ULONG_PTR Address
; /* Address of the breakpoint */
54 BOOLEAN Global
; /* Whether the breakpoint is global or local to a process */
55 PEPROCESS Process
; /* Owning process */
56 PCHAR ConditionExpression
;
59 /* KdbBreakPointSoftware */
60 UCHAR SavedInstruction
;
61 /* KdbBreakPointHardware */
65 KDB_ACCESS_TYPE AccessType
;
68 } KDB_BREAKPOINT
, *PKDB_BREAKPOINT
;
70 typedef enum _KDB_ENTER_CONDITION
76 } KDB_ENTER_CONDITION
;
79 /* from kdb_symbols.c */
80 typedef struct _KDB_MODULE_INFO
85 PROSSYM_INFO RosSymInfo
;
86 } KDB_MODULE_INFO
, *PKDB_MODULE_INFO
;
89 /* FUNCTIONS *****************************************************************/
91 /* from i386/i386-dis.c */
96 IN ULONG IntelSyntax
);
102 /* from i386/kdb_help.S */
105 KdbpStackSwitchAndCall(
107 IN
VOID (*Function
)(VOID
));
111 extern PCHAR KdbInitFileBuffer
;
118 IN BOOLEAN EnteredOnSingleStep
);
122 IN PUNICODE_STRING Name
);
125 KdbpCliInterpretInitFile();
132 /* from kdb_expr.c */
135 KdbpRpnEvaluateExpression(
137 IN PKDB_KTRAP_FRAME TrapFrame
,
138 OUT PULONGLONG Result
,
139 OUT PLONG ErrOffset OPTIONAL
,
140 OUT PCHAR ErrMsg OPTIONAL
);
143 KdbpRpnParseExpression(
145 OUT PLONG ErrOffset OPTIONAL
,
146 OUT PCHAR ErrMsg OPTIONAL
);
149 KdbpRpnEvaluateParsedExpression(
151 IN PKDB_KTRAP_FRAME TrapFrame
,
152 OUT PULONGLONG Result
,
153 OUT PLONG ErrOffset OPTIONAL
,
154 OUT PCHAR ErrMsg OPTIONAL
);
156 /* from kdb_symbols.c */
159 KdbpSymFindModuleByAddress(IN PVOID Address
,
160 OUT PKDB_MODULE_INFO pInfo
);
163 KdbpSymFindModuleByName(IN LPCWSTR Name
,
164 OUT PKDB_MODULE_INFO pInfo
);
167 KdbpSymFindModuleByIndex(IN INT Index
,
168 OUT PKDB_MODULE_INFO pInfo
);
171 KdbSymPrintAddress(IN PVOID Address
);
174 KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo
,
175 IN ULONG_PTR RelativeAddress
,
176 OUT PULONG LineNumber OPTIONAL
,
177 OUT PCH FileName OPTIONAL
,
178 OUT PCH FunctionName OPTIONAL
);
182 extern PEPROCESS KdbCurrentProcess
;
183 extern PETHREAD KdbCurrentThread
;
184 extern LONG KdbLastBreakPointNr
;
185 extern ULONG KdbNumSingleSteps
;
186 extern BOOLEAN KdbSingleStepOver
;
187 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame
;
194 IN PUNICODE_STRING Name
);
197 KdbpGetNextBreakPointNr(
198 IN ULONG Start OPTIONAL
);
201 KdbpGetBreakPointInfo(
202 IN ULONG BreakPointNr
,
203 OUT ULONG_PTR
*Address OPTIONAL
,
204 OUT KDB_BREAKPOINT_TYPE
*Type OPTIONAL
,
205 OUT UCHAR
*Size OPTIONAL
,
206 OUT KDB_ACCESS_TYPE
*AccessType OPTIONAL
,
207 OUT UCHAR
*DebugReg OPTIONAL
,
208 OUT BOOLEAN
*Enabled OPTIONAL
,
209 OUT BOOLEAN
*Global OPTIONAL
,
210 OUT PEPROCESS
*Process OPTIONAL
,
211 OUT PCHAR
*ConditionExpression OPTIONAL
);
214 KdbpInsertBreakPoint(
215 IN ULONG_PTR Address
,
216 IN KDB_BREAKPOINT_TYPE Type
,
217 IN UCHAR Size OPTIONAL
,
218 IN KDB_ACCESS_TYPE AccessType OPTIONAL
,
219 IN PCHAR ConditionExpression OPTIONAL
,
221 OUT PULONG BreakPointNumber OPTIONAL
);
224 KdbpDeleteBreakPoint(
225 IN LONG BreakPointNr OPTIONAL
,
226 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
229 KdbpEnableBreakPoint(
230 IN LONG BreakPointNr OPTIONAL
,
231 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
234 KdbpDisableBreakPoint(
235 IN LONG BreakPointNr OPTIONAL
,
236 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
239 KdbpGetEnterCondition(
241 IN BOOLEAN FirstChance
,
242 OUT KDB_ENTER_CONDITION
*Condition
);
245 KdbpSetEnterCondition(
247 IN BOOLEAN FirstChance
,
248 IN KDB_ENTER_CONDITION Condition
);
258 /* other functions */
260 #define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
261 #define KdbpSafeWriteMemory(dst, src, size) MmSafeCopyToUser(dst, src, size)
263 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
265 KdbpTryGetCharKeyboard(PULONG ScanCode
, UINT Retry
);
267 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
269 KdbpTryGetCharSerial(UINT Retry
);
278 DbgEnableFile(PCH Filename
);
280 DbgDisableFile(PCH Filename
);
283 #endif /* NTOSKRNL_KDB_H */