mirror of
https://github.com/reactos/reactos.git
synced 2024-11-18 13:01:40 +00:00
835c30232e
KD64: Raise to HIGH_LEVEL when entering trap KDBG: lower to DISPATCH_LEVEL when applying IRQL hack & use a worker thread to load symbols KD&KDBG: Actually unload symbols when required
284 lines
6 KiB
C
284 lines
6 KiB
C
#pragma once
|
|
#include "internal/kd.h"
|
|
|
|
/* DEFINES *******************************************************************/
|
|
|
|
/* formerly located in kdbg/kdb_symbols.c */
|
|
#define TAG_KDBS 'SBDK'
|
|
#define TAG_KDBG 'GBDK'
|
|
|
|
/* TYPES *********************************************************************/
|
|
|
|
/* from kdb.c */
|
|
typedef CONTEXT KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
|
|
|
|
typedef enum _KDB_BREAKPOINT_TYPE
|
|
{
|
|
KdbBreakPointNone = 0,
|
|
KdbBreakPointSoftware,
|
|
KdbBreakPointHardware,
|
|
KdbBreakPointTemporary
|
|
} KDB_BREAKPOINT_TYPE;
|
|
|
|
typedef enum _KDB_ACCESS_TYPE
|
|
{
|
|
KdbAccessRead,
|
|
KdbAccessWrite,
|
|
KdbAccessReadWrite,
|
|
KdbAccessExec
|
|
} KDB_ACCESS_TYPE;
|
|
|
|
typedef struct _KDB_BREAKPOINT
|
|
{
|
|
KDB_BREAKPOINT_TYPE Type; /* Type of breakpoint */
|
|
BOOLEAN Enabled; /* Whether the bp is enabled */
|
|
ULONG_PTR Address; /* Address of the breakpoint */
|
|
BOOLEAN Global; /* Whether the breakpoint is global or local to a process */
|
|
PEPROCESS Process; /* Owning process */
|
|
PCHAR ConditionExpression;
|
|
PVOID Condition;
|
|
union {
|
|
/* KdbBreakPointSoftware */
|
|
UCHAR SavedInstruction;
|
|
/* KdbBreakPointHardware */
|
|
struct {
|
|
UCHAR DebugReg : 2;
|
|
UCHAR Size : 3;
|
|
KDB_ACCESS_TYPE AccessType;
|
|
} Hw;
|
|
} Data;
|
|
} KDB_BREAKPOINT, *PKDB_BREAKPOINT;
|
|
|
|
typedef enum _KDB_ENTER_CONDITION
|
|
{
|
|
KdbDoNotEnter,
|
|
KdbEnterAlways,
|
|
KdbEnterFromKmode,
|
|
KdbEnterFromUmode
|
|
} KDB_ENTER_CONDITION;
|
|
|
|
/* These values MUST be nonzero. They're used as bit masks. */
|
|
typedef enum _KDB_OUTPUT_SETTINGS
|
|
{
|
|
KD_DEBUG_KDSERIAL = 1,
|
|
KD_DEBUG_KDNOECHO = 2
|
|
} KDB_OUTPUT_SETTINGS;
|
|
|
|
/* FUNCTIONS *****************************************************************/
|
|
|
|
/* from i386/i386-dis.c */
|
|
|
|
LONG
|
|
KdbpDisassemble(
|
|
IN ULONG Address,
|
|
IN ULONG IntelSyntax);
|
|
|
|
LONG
|
|
KdbpGetInstLength(
|
|
IN ULONG Address);
|
|
|
|
/* from i386/kdb_help.S */
|
|
|
|
VOID NTAPI
|
|
KdbpStackSwitchAndCall(
|
|
IN PVOID NewStack,
|
|
IN VOID (*Function)(VOID));
|
|
|
|
/* from kdb_cli.c */
|
|
|
|
extern PCHAR KdbInitFileBuffer;
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KdbRegisterCliCallback(
|
|
PVOID Callback,
|
|
BOOLEAN Deregister);
|
|
|
|
VOID
|
|
KdbpCliInit(VOID);
|
|
|
|
VOID
|
|
KdbpCliMainLoop(
|
|
IN BOOLEAN EnteredOnSingleStep);
|
|
|
|
VOID
|
|
KdbpCliModuleLoaded(
|
|
IN PUNICODE_STRING Name);
|
|
|
|
VOID
|
|
KdbpCliInterpretInitFile(VOID);
|
|
|
|
VOID
|
|
KdbpPrint(
|
|
IN PCHAR Format,
|
|
IN ... OPTIONAL);
|
|
|
|
BOOLEAN
|
|
NTAPI
|
|
KdbpGetHexNumber(
|
|
IN PCHAR pszNum,
|
|
OUT ULONG_PTR *pulValue);
|
|
|
|
/* from kdb_expr.c */
|
|
|
|
BOOLEAN
|
|
KdbpRpnEvaluateExpression(
|
|
IN PCHAR Expression,
|
|
IN PKDB_KTRAP_FRAME TrapFrame,
|
|
OUT PULONGLONG Result,
|
|
OUT PLONG ErrOffset OPTIONAL,
|
|
OUT PCHAR ErrMsg OPTIONAL);
|
|
|
|
PVOID
|
|
KdbpRpnParseExpression(
|
|
IN PCHAR Expression,
|
|
OUT PLONG ErrOffset OPTIONAL,
|
|
OUT PCHAR ErrMsg OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpRpnEvaluateParsedExpression(
|
|
IN PVOID Expression,
|
|
IN PKDB_KTRAP_FRAME TrapFrame,
|
|
OUT PULONGLONG Result,
|
|
OUT PLONG ErrOffset OPTIONAL,
|
|
OUT PCHAR ErrMsg OPTIONAL);
|
|
|
|
/* from kdb_symbols.c */
|
|
|
|
BOOLEAN
|
|
KdbpSymFindModule(
|
|
IN PVOID Address OPTIONAL,
|
|
IN INT Index OPTIONAL,
|
|
OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
|
|
|
|
BOOLEAN
|
|
KdbSymPrintAddress(
|
|
IN PVOID Address,
|
|
IN PCONTEXT Context
|
|
);
|
|
|
|
VOID
|
|
KdbSymProcessSymbols(
|
|
_Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry,
|
|
_In_ BOOLEAN Load);
|
|
|
|
/* from kdb.c */
|
|
|
|
extern PEPROCESS KdbCurrentProcess;
|
|
extern PETHREAD KdbCurrentThread;
|
|
extern LONG KdbLastBreakPointNr;
|
|
extern ULONG KdbNumSingleSteps;
|
|
extern BOOLEAN KdbSingleStepOver;
|
|
extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
|
|
extern ULONG KdbDebugState;
|
|
|
|
LONG
|
|
KdbpGetNextBreakPointNr(
|
|
IN ULONG Start OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpGetBreakPointInfo(
|
|
IN ULONG BreakPointNr,
|
|
OUT ULONG_PTR *Address OPTIONAL,
|
|
OUT KDB_BREAKPOINT_TYPE *Type OPTIONAL,
|
|
OUT UCHAR *Size OPTIONAL,
|
|
OUT KDB_ACCESS_TYPE *AccessType OPTIONAL,
|
|
OUT UCHAR *DebugReg OPTIONAL,
|
|
OUT BOOLEAN *Enabled OPTIONAL,
|
|
OUT BOOLEAN *Global OPTIONAL,
|
|
OUT PEPROCESS *Process OPTIONAL,
|
|
OUT PCHAR *ConditionExpression OPTIONAL);
|
|
|
|
NTSTATUS
|
|
KdbpInsertBreakPoint(
|
|
IN ULONG_PTR Address,
|
|
IN KDB_BREAKPOINT_TYPE Type,
|
|
IN UCHAR Size OPTIONAL,
|
|
IN KDB_ACCESS_TYPE AccessType OPTIONAL,
|
|
IN PCHAR ConditionExpression OPTIONAL,
|
|
IN BOOLEAN Global,
|
|
OUT PLONG BreakPointNr OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpDeleteBreakPoint(
|
|
IN LONG BreakPointNr OPTIONAL,
|
|
IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpEnableBreakPoint(
|
|
IN LONG BreakPointNr OPTIONAL,
|
|
IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpDisableBreakPoint(
|
|
IN LONG BreakPointNr OPTIONAL,
|
|
IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
|
|
|
|
BOOLEAN
|
|
KdbpGetEnterCondition(
|
|
IN LONG ExceptionNr,
|
|
IN BOOLEAN FirstChance,
|
|
OUT KDB_ENTER_CONDITION *Condition);
|
|
|
|
BOOLEAN
|
|
KdbpSetEnterCondition(
|
|
IN LONG ExceptionNr,
|
|
IN BOOLEAN FirstChance,
|
|
IN KDB_ENTER_CONDITION Condition);
|
|
|
|
BOOLEAN
|
|
KdbpAttachToThread(
|
|
PVOID ThreadId);
|
|
|
|
BOOLEAN
|
|
KdbpAttachToProcess(
|
|
PVOID ProcessId);
|
|
|
|
VOID
|
|
NTAPI
|
|
KdbpGetCommandLineSettings(PCHAR p1);
|
|
|
|
KD_CONTINUE_TYPE
|
|
KdbEnterDebuggerException(IN PEXCEPTION_RECORD64 ExceptionRecord,
|
|
IN KPROCESSOR_MODE PreviousMode,
|
|
IN OUT PCONTEXT Context,
|
|
IN BOOLEAN FirstChance);
|
|
|
|
KD_CONTINUE_TYPE
|
|
KdbEnterDebuggerFirstChanceException(
|
|
IN OUT PKTRAP_FRAME TrapFrame);
|
|
|
|
/* other functions */
|
|
|
|
NTSTATUS
|
|
KdbpSafeReadMemory(OUT PVOID Dest,
|
|
IN PVOID Src,
|
|
IN ULONG Bytes);
|
|
|
|
NTSTATUS
|
|
KdbpSafeWriteMemory(OUT PVOID Dest,
|
|
IN PVOID Src,
|
|
IN ULONG Bytes);
|
|
|
|
#define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
|
|
CHAR
|
|
KdbpTryGetCharKeyboard(PULONG ScanCode, ULONG Retry);
|
|
|
|
#define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
|
|
CHAR
|
|
KdbpTryGetCharSerial(ULONG Retry);
|
|
|
|
VOID
|
|
KdbEnter(VOID);
|
|
VOID
|
|
DbgRDebugInit(VOID);
|
|
VOID
|
|
DbgShowFiles(VOID);
|
|
VOID
|
|
DbgEnableFile(PCH Filename);
|
|
VOID
|
|
DbgDisableFile(PCH Filename);
|
|
VOID
|
|
KbdDisableMouse(VOID);
|
|
VOID
|
|
KbdEnableMouse(VOID);
|