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]))
19 /* TYPES *********************************************************************/
22 typedef struct _KDB_KTRAP_FRAME
26 ULONG Cr1
; /* reserved/unused */
30 } KDB_KTRAP_FRAME
, *PKDB_KTRAP_FRAME
;
32 typedef enum _KDB_BREAKPOINT_TYPE
34 KdbBreakPointNone
= 0,
35 KdbBreakPointSoftware
,
36 KdbBreakPointHardware
,
37 KdbBreakPointTemporary
38 } KDB_BREAKPOINT_TYPE
;
40 typedef enum _KDB_ACCESS_TYPE
48 typedef struct _KDB_BREAKPOINT
50 KDB_BREAKPOINT_TYPE Type
; /* Type of breakpoint */
51 BOOLEAN Enabled
; /* Whether the bp is enabled */
52 ULONG_PTR Address
; /* Address of the breakpoint */
53 BOOLEAN Global
; /* Whether the breakpoint is global or local to a process */
54 PEPROCESS Process
; /* Owning process */
55 PCHAR ConditionExpression
;
58 /* KdbBreakPointSoftware */
59 UCHAR SavedInstruction
;
60 /* KdbBreakPointHardware */
64 KDB_ACCESS_TYPE AccessType
;
67 } KDB_BREAKPOINT
, *PKDB_BREAKPOINT
;
69 typedef enum _KDB_ENTER_CONDITION
75 } KDB_ENTER_CONDITION
;
77 /* These values MUST be nonzero. They're used as bit masks. */
78 typedef enum _KDB_OUTPUT_SETTINGS
80 KD_DEBUG_KDSERIAL
= 1,
82 } KDB_OUTPUT_SETTINGS
;
84 /* FUNCTIONS *****************************************************************/
86 /* from i386/i386-dis.c */
91 IN ULONG IntelSyntax
);
97 /* from i386/kdb_help.S */
100 KdbpStackSwitchAndCall(
102 IN
VOID (*Function
)(VOID
));
106 extern PCHAR KdbInitFileBuffer
;
113 IN BOOLEAN EnteredOnSingleStep
);
117 IN PUNICODE_STRING Name
);
120 KdbpCliInterpretInitFile();
127 /* from kdb_expr.c */
130 KdbpRpnEvaluateExpression(
132 IN PKDB_KTRAP_FRAME TrapFrame
,
133 OUT PULONGLONG Result
,
134 OUT PLONG ErrOffset OPTIONAL
,
135 OUT PCHAR ErrMsg OPTIONAL
);
138 KdbpRpnParseExpression(
140 OUT PLONG ErrOffset OPTIONAL
,
141 OUT PCHAR ErrMsg OPTIONAL
);
144 KdbpRpnEvaluateParsedExpression(
146 IN PKDB_KTRAP_FRAME TrapFrame
,
147 OUT PULONGLONG Result
,
148 OUT PLONG ErrOffset OPTIONAL
,
149 OUT PCHAR ErrMsg OPTIONAL
);
151 /* from kdb_symbols.c */
154 KdbpSymFindModuleByAddress(IN PVOID Address
,
155 OUT PKDB_MODULE_INFO pInfo
);
158 KdbpSymFindModuleByName(IN LPCWSTR Name
,
159 OUT PKDB_MODULE_INFO pInfo
);
162 KdbpSymFindModuleByIndex(IN INT Index
,
163 OUT PKDB_MODULE_INFO pInfo
);
167 extern PEPROCESS KdbCurrentProcess
;
168 extern PETHREAD KdbCurrentThread
;
169 extern LONG KdbLastBreakPointNr
;
170 extern ULONG KdbNumSingleSteps
;
171 extern BOOLEAN KdbSingleStepOver
;
172 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame
;
173 extern ULONG KdbDebugState
;
176 KdbpGetNextBreakPointNr(
177 IN ULONG Start OPTIONAL
);
180 KdbpGetBreakPointInfo(
181 IN ULONG BreakPointNr
,
182 OUT ULONG_PTR
*Address OPTIONAL
,
183 OUT KDB_BREAKPOINT_TYPE
*Type OPTIONAL
,
184 OUT UCHAR
*Size OPTIONAL
,
185 OUT KDB_ACCESS_TYPE
*AccessType OPTIONAL
,
186 OUT UCHAR
*DebugReg OPTIONAL
,
187 OUT BOOLEAN
*Enabled OPTIONAL
,
188 OUT BOOLEAN
*Global OPTIONAL
,
189 OUT PEPROCESS
*Process OPTIONAL
,
190 OUT PCHAR
*ConditionExpression OPTIONAL
);
193 KdbpInsertBreakPoint(
194 IN ULONG_PTR Address
,
195 IN KDB_BREAKPOINT_TYPE Type
,
196 IN UCHAR Size OPTIONAL
,
197 IN KDB_ACCESS_TYPE AccessType OPTIONAL
,
198 IN PCHAR ConditionExpression OPTIONAL
,
200 OUT PULONG BreakPointNumber OPTIONAL
);
203 KdbpDeleteBreakPoint(
204 IN LONG BreakPointNr OPTIONAL
,
205 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
208 KdbpEnableBreakPoint(
209 IN LONG BreakPointNr OPTIONAL
,
210 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
213 KdbpDisableBreakPoint(
214 IN LONG BreakPointNr OPTIONAL
,
215 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
218 KdbpGetEnterCondition(
220 IN BOOLEAN FirstChance
,
221 OUT KDB_ENTER_CONDITION
*Condition
);
224 KdbpSetEnterCondition(
226 IN BOOLEAN FirstChance
,
227 IN KDB_ENTER_CONDITION Condition
);
239 KdbpGetCommandLineSettings(PCHAR p1
);
242 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord
,
243 KPROCESSOR_MODE PreviousMode
,
245 PKTRAP_FRAME TrapFrame
,
246 BOOLEAN FirstChance
);
247 /* other functions */
249 #define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
250 #define KdbpSafeWriteMemory(dst, src, size) MmSafeCopyToUser(dst, src, size)
252 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
254 KdbpTryGetCharKeyboard(PULONG ScanCode
, UINT Retry
);
256 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
258 KdbpTryGetCharSerial(UINT Retry
);
267 DbgEnableFile(PCH Filename
);
269 DbgDisableFile(PCH Filename
);
275 #endif /* NTOSKRNL_KDB_H */