#pragma once
-
-/* DEFINES *******************************************************************/
-
-#ifndef RTL_NUMBER_OF
-# define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
-#endif
-
-/* formerly located in kdbg/kdb_symbols.c */
-#define TAG_KDBS 'SBDK'
-#define TAG_KDBG 'GBDK'
+#include "../kd/kd.h"
/* TYPES *********************************************************************/
/* from kdb.c */
-typedef struct _KDB_KTRAP_FRAME
-{
- KTRAP_FRAME Tf;
- ULONG Cr0;
- ULONG Cr1; /* reserved/unused */
- ULONG Cr2;
- ULONG Cr3;
- ULONG Cr4;
-} KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
+typedef CONTEXT KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
typedef enum _KDB_BREAKPOINT_TYPE
{
KdbEnterFromUmode
} KDB_ENTER_CONDITION;
-/* These values MUST be nonzero. They're used as bit masks. */
-typedef enum _KDB_OUTPUT_SETTINGS
+typedef enum _KD_CONTINUE_TYPE
{
- KD_DEBUG_KDSERIAL = 1,
- KD_DEBUG_KDNOECHO = 2
-} KDB_OUTPUT_SETTINGS;
+ kdContinue = 0,
+ kdDoNotHandleException,
+ kdHandleException
+} KD_CONTINUE_TYPE;
+
+
+/* GLOBALS *******************************************************************/
+
+extern PCHAR KdbInitFileBuffer;
+
+extern PEPROCESS KdbCurrentProcess;
+extern PETHREAD KdbCurrentThread;
+extern LONG KdbLastBreakPointNr;
+extern ULONG KdbNumSingleSteps;
+extern BOOLEAN KdbSingleStepOver;
+extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
+
/* FUNCTIONS *****************************************************************/
LONG
KdbpDisassemble(
- IN ULONG Address,
+ IN ULONG_PTR Address,
IN ULONG IntelSyntax);
LONG
KdbpGetInstLength(
- IN ULONG Address);
+ IN ULONG_PTR Address);
/* from i386/kdb_help.S */
/* from kdb_cli.c */
-extern PCHAR KdbInitFileBuffer;
+NTSTATUS
+NTAPI
+KdbInitialize(
+ _In_ PKD_DISPATCH_TABLE DispatchTable,
+ _In_ ULONG BootPhase);
-VOID
+BOOLEAN
+NTAPI
+KdbRegisterCliCallback(
+ PVOID Callback,
+ BOOLEAN Deregister);
+
+NTSTATUS
KdbpCliInit(VOID);
VOID
IN BOOLEAN EnteredOnSingleStep);
VOID
-KdbpCliModuleLoaded(
- IN PUNICODE_STRING Name);
+KdbpCliInterpretInitFile(VOID);
VOID
-KdbpCliInterpretInitFile(VOID);
+KdbpCommandHistoryAppend(
+ _In_ PCSTR Command);
+
+PCSTR
+KdbGetHistoryEntry(
+ _Inout_ PLONG NextIndex,
+ _In_ BOOLEAN Next);
+
+VOID
+KdbpPager(
+ _In_ PCHAR Buffer,
+ _In_ ULONG BufLength);
VOID
KdbpPrint(
- IN PCHAR Format,
- IN ... OPTIONAL);
+ _In_ PSTR Format,
+ _In_ ...);
+
+VOID
+KdbpPrintUnicodeString(
+ _In_ PCUNICODE_STRING String);
BOOLEAN
NTAPI
BOOLEAN
KdbpSymFindModule(
IN PVOID Address OPTIONAL,
- IN LPCWSTR Name OPTIONAL,
IN INT Index OPTIONAL,
OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
-/* from kdb.c */
+BOOLEAN
+KdbSymPrintAddress(
+ IN PVOID Address,
+ IN PCONTEXT Context);
-extern PEPROCESS KdbCurrentProcess;
-extern PETHREAD KdbCurrentThread;
-extern LONG KdbLastBreakPointNr;
-extern ULONG KdbNumSingleSteps;
-extern BOOLEAN KdbSingleStepOver;
-extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
-extern ULONG KdbDebugState;
+VOID
+KdbSymProcessSymbols(
+ _Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry,
+ _In_ BOOLEAN Load);
+
+BOOLEAN
+KdbSymInit(
+ _In_ ULONG BootPhase);
+
+/* from kdb.c */
LONG
KdbpGetNextBreakPointNr(
PVOID ProcessId);
VOID
-NTAPI
-KdbpGetCommandLineSettings(PCHAR p1);
+KdbpGetCommandLineSettings(
+ _In_ PCSTR p1);
KD_CONTINUE_TYPE
-KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
- KPROCESSOR_MODE PreviousMode,
- PCONTEXT Context,
- PKTRAP_FRAME TrapFrame,
- BOOLEAN FirstChance);
+KdbEnterDebuggerException(IN PEXCEPTION_RECORD64 ExceptionRecord,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN OUT PCONTEXT Context,
+ IN BOOLEAN FirstChance);
+
/* other functions */
+BOOLEAN
+NTAPI
+KdpSafeReadMemory(
+ IN ULONG_PTR Addr,
+ IN LONG Len,
+ OUT PVOID Value
+);
+
+BOOLEAN
+NTAPI
+KdpSafeWriteMemory(
+ IN ULONG_PTR Addr,
+ IN LONG Len,
+ IN ULONGLONG Value
+);
+
NTSTATUS
KdbpSafeReadMemory(OUT PVOID Dest,
IN PVOID Src,
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);
+KbdDisableMouse(VOID);
+
VOID
-DbgShowFiles(VOID);
+KbdEnableMouse(VOID);
+
+
+/* From kdb_print.c */
+
VOID
-DbgEnableFile(PCH Filename);
+KdbPrintString(
+ _In_ const CSTRING* Output);
+
+USHORT
+KdbPromptString(
+ _In_ const CSTRING* PromptString,
+ _Inout_ PSTRING ResponseString);
+
VOID
-DbgDisableFile(PCH Filename);
+KdbPutsN(
+ _In_ PCCH String,
+ _In_ USHORT Length);
+
VOID
-KbdDisableMouse(VOID);
+KdbPuts(
+ _In_ PCSTR String);
+
VOID
-KbdEnableMouse(VOID);
+__cdecl
+KdbPrintf(
+ _In_ PCSTR Format,
+ ...);
+
+SIZE_T
+KdbPrompt(
+ _In_ PCSTR Prompt,
+ _Out_ PCHAR Buffer,
+ _In_ SIZE_T Size);