2 #include "internal/kd.h"
4 /* DEFINES *******************************************************************/
6 /* formerly located in kdbg/kdb_symbols.c */
7 #define TAG_KDBS 'SBDK'
8 #define TAG_KDBG 'GBDK'
10 /* TYPES *********************************************************************/
13 typedef struct _KDB_KTRAP_FRAME
20 } KDB_KTRAP_FRAME
, *PKDB_KTRAP_FRAME
;
22 typedef enum _KDB_BREAKPOINT_TYPE
24 KdbBreakPointNone
= 0,
25 KdbBreakPointSoftware
,
26 KdbBreakPointHardware
,
27 KdbBreakPointTemporary
28 } KDB_BREAKPOINT_TYPE
;
30 typedef enum _KDB_ACCESS_TYPE
38 typedef struct _KDB_BREAKPOINT
40 KDB_BREAKPOINT_TYPE Type
; /* Type of breakpoint */
41 BOOLEAN Enabled
; /* Whether the bp is enabled */
42 ULONG_PTR Address
; /* Address of the breakpoint */
43 BOOLEAN Global
; /* Whether the breakpoint is global or local to a process */
44 PEPROCESS Process
; /* Owning process */
45 PCHAR ConditionExpression
;
48 /* KdbBreakPointSoftware */
49 UCHAR SavedInstruction
;
50 /* KdbBreakPointHardware */
54 KDB_ACCESS_TYPE AccessType
;
57 } KDB_BREAKPOINT
, *PKDB_BREAKPOINT
;
59 typedef enum _KDB_ENTER_CONDITION
65 } KDB_ENTER_CONDITION
;
67 /* These values MUST be nonzero. They're used as bit masks. */
68 typedef enum _KDB_OUTPUT_SETTINGS
70 KD_DEBUG_KDSERIAL
= 1,
72 } KDB_OUTPUT_SETTINGS
;
74 /* FUNCTIONS *****************************************************************/
76 /* from i386/i386-dis.c */
81 IN ULONG IntelSyntax
);
87 /* from i386/kdb_help.S */
90 KdbpStackSwitchAndCall(
92 IN
VOID (*Function
)(VOID
));
96 extern PCHAR KdbInitFileBuffer
;
103 IN BOOLEAN EnteredOnSingleStep
);
107 IN PUNICODE_STRING Name
);
110 KdbpCliInterpretInitFile(VOID
);
121 OUT ULONG_PTR
*pulValue
);
123 /* from kdb_expr.c */
126 KdbpRpnEvaluateExpression(
128 IN PKDB_KTRAP_FRAME TrapFrame
,
129 OUT PULONGLONG Result
,
130 OUT PLONG ErrOffset OPTIONAL
,
131 OUT PCHAR ErrMsg OPTIONAL
);
134 KdbpRpnParseExpression(
136 OUT PLONG ErrOffset OPTIONAL
,
137 OUT PCHAR ErrMsg OPTIONAL
);
140 KdbpRpnEvaluateParsedExpression(
142 IN PKDB_KTRAP_FRAME TrapFrame
,
143 OUT PULONGLONG Result
,
144 OUT PLONG ErrOffset OPTIONAL
,
145 OUT PCHAR ErrMsg OPTIONAL
);
147 /* from kdb_symbols.c */
151 IN PVOID Address OPTIONAL
,
152 IN LPCWSTR Name OPTIONAL
,
153 IN INT Index OPTIONAL
,
154 OUT PLDR_DATA_TABLE_ENTRY
* pLdrEntry
);
158 extern PEPROCESS KdbCurrentProcess
;
159 extern PETHREAD KdbCurrentThread
;
160 extern LONG KdbLastBreakPointNr
;
161 extern ULONG KdbNumSingleSteps
;
162 extern BOOLEAN KdbSingleStepOver
;
163 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame
;
164 extern ULONG KdbDebugState
;
167 KdbpGetNextBreakPointNr(
168 IN ULONG Start OPTIONAL
);
171 KdbpGetBreakPointInfo(
172 IN ULONG BreakPointNr
,
173 OUT ULONG_PTR
*Address OPTIONAL
,
174 OUT KDB_BREAKPOINT_TYPE
*Type OPTIONAL
,
175 OUT UCHAR
*Size OPTIONAL
,
176 OUT KDB_ACCESS_TYPE
*AccessType OPTIONAL
,
177 OUT UCHAR
*DebugReg OPTIONAL
,
178 OUT BOOLEAN
*Enabled OPTIONAL
,
179 OUT BOOLEAN
*Global OPTIONAL
,
180 OUT PEPROCESS
*Process OPTIONAL
,
181 OUT PCHAR
*ConditionExpression OPTIONAL
);
184 KdbpInsertBreakPoint(
185 IN ULONG_PTR Address
,
186 IN KDB_BREAKPOINT_TYPE Type
,
187 IN UCHAR Size OPTIONAL
,
188 IN KDB_ACCESS_TYPE AccessType OPTIONAL
,
189 IN PCHAR ConditionExpression OPTIONAL
,
191 OUT PLONG BreakPointNr OPTIONAL
);
194 KdbpDeleteBreakPoint(
195 IN LONG BreakPointNr OPTIONAL
,
196 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
199 KdbpEnableBreakPoint(
200 IN LONG BreakPointNr OPTIONAL
,
201 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
204 KdbpDisableBreakPoint(
205 IN LONG BreakPointNr OPTIONAL
,
206 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
209 KdbpGetEnterCondition(
211 IN BOOLEAN FirstChance
,
212 OUT KDB_ENTER_CONDITION
*Condition
);
215 KdbpSetEnterCondition(
217 IN BOOLEAN FirstChance
,
218 IN KDB_ENTER_CONDITION Condition
);
230 KdbpGetCommandLineSettings(PCHAR p1
);
233 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord
,
234 KPROCESSOR_MODE PreviousMode
,
236 PKTRAP_FRAME TrapFrame
,
237 BOOLEAN FirstChance
);
238 /* other functions */
241 KdbpSafeReadMemory(OUT PVOID Dest
,
246 KdbpSafeWriteMemory(OUT PVOID Dest
,
250 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
252 KdbpTryGetCharKeyboard(PULONG ScanCode
, ULONG Retry
);
254 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
256 KdbpTryGetCharSerial(ULONG Retry
);
265 DbgEnableFile(PCH Filename
);
267 DbgDisableFile(PCH Filename
);
269 KbdDisableMouse(VOID
);
271 KbdEnableMouse(VOID
);