Skip to content

Commit f0b9bc9

Browse files
committed
Driver: fixed debugger block initialization
1 parent e08d4a2 commit f0b9bc9

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

src/BlackBoneDrv/BlackBoneDrv.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,16 +453,22 @@ NTSTATUS BBInitDynamicData( IN OUT PDYNAMIC_DATA pData )
453453
if (pData->ExRemoveTable != 0)
454454
pData->correctBuild = TRUE;
455455

456-
DPRINT( "BlackBone: Dynamic search status: SSDT - %s, ExRemoveTable - %s\n",
456+
DPRINT(
457+
"BlackBone: Dynamic search status: SSDT - %s, ExRemoveTable - %s\n",
457458
GetSSDTBase() != NULL ? "SUCCESS" : "FAIL",
458459
pData->ExRemoveTable != 0 ? "SUCCESS" : "FAIL"
459460
);
460461

461462
if (pData->ver >= WINVER_10_RS1)
462463
{
464+
DPRINT(
465+
"BlackBone: %s: g_KdBlock->KernBase: %p, GetKernelBase() = 0x%p \n",
466+
__FUNCTION__, g_KdBlock.KernBase, GetKernelBase( NULL )
467+
);
468+
463469
ULONGLONG mask = (1ll << (PHYSICAL_ADDRESS_BITS - 1)) - 1;
464-
dynData.DYN_PTE_BASE = (ULONG_PTR)g_KdBlock->PteBase;
465-
dynData.DYN_PDE_BASE = (ULONG_PTR)((g_KdBlock->PteBase & ~mask) | ((g_KdBlock->PteBase >> 9) & mask));
470+
dynData.DYN_PTE_BASE = (ULONG_PTR)g_KdBlock.PteBase;
471+
dynData.DYN_PDE_BASE = (ULONG_PTR)((g_KdBlock.PteBase & ~mask) | ((g_KdBlock.PteBase >> 9) & mask));
466472
}
467473

468474
DPRINT( "BlackBone: PDE_BASE: %p, PTE_BASE: %p\n", pData->DYN_PDE_BASE, pData->DYN_PTE_BASE );

src/BlackBoneDrv/NativeStructs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -962,4 +962,4 @@ C_ASSERT( FIELD_OFFSET( DUMP_HEADER, BugCheckParameter3 ) == 0x50 );
962962
C_ASSERT( FIELD_OFFSET( DUMP_HEADER, BugCheckParameter4 ) == 0x58 );
963963
C_ASSERT( FIELD_OFFSET( DUMP_HEADER, KdDebuggerDataBlock ) == 0x80 );
964964

965-
extern PKDDEBUGGER_DATA64 g_KdBlock;
965+
extern KDDEBUGGER_DATA64 g_KdBlock;

src/BlackBoneDrv/Private.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extern DYNAMIC_DATA dynData;
1717
PVOID g_KernelBase = NULL;
1818
ULONG g_KernelSize = 0;
1919
PSYSTEM_SERVICE_DESCRIPTOR_TABLE g_SSDT = NULL;
20-
PKDDEBUGGER_DATA64 g_KdBlock = NULL;
20+
KDDEBUGGER_DATA64 g_KdBlock = {0};
2121

2222
MMPTE ValidKernelPte =
2323
{
@@ -32,20 +32,19 @@ MMPTE ValidKernelPte =
3232
/// Initialize debugger block g_KdBlock
3333
/// </summary>
3434
VOID InitializeDebuggerBlock()
35-
{
35+
{
3636
CONTEXT context = { 0 };
3737
context.ContextFlags = CONTEXT_FULL;
3838
RtlCaptureContext( &context );
39-
40-
PDUMP_HEADER pHeader = ExAllocatePool( NonPagedPool, DUMP_BLOCK_SIZE );
41-
if (pHeader)
39+
40+
PDUMP_HEADER dumpHeader = ExAllocatePool( NonPagedPool, DUMP_BLOCK_SIZE );
41+
if (dumpHeader)
4242
{
43-
KeCapturePersistentThreadState( &context, NULL, 0, 0, 0, 0, 0, pHeader );
44-
g_KdBlock = pHeader->KdDebuggerDataBlock;
45-
ExFreePool( pHeader );
46-
}
43+
KeCapturePersistentThreadState( &context, NULL, 0, 0, 0, 0, 0, dumpHeader );
44+
RtlCopyMemory( &g_KdBlock, (PUCHAR)dumpHeader + KDDEBUGGER_DATA_OFFSET, sizeof( g_KdBlock ) );
4745

48-
DPRINT( "BlackBone: %s: g_KdBlock = 0x%p\n", __FUNCTION__, g_KdBlock );
46+
ExFreePool( dumpHeader );
47+
}
4948
}
5049

5150
/// <summary>

src/BlackBoneDrv/Private.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@
8585
#define PTE_BASE 0xFFFFF68000000000UI64
8686
#endif
8787

88+
#ifndef _WIN64
89+
#define KDDEBUGGER_DATA_OFFSET 0x1068
90+
#else
91+
#define KDDEBUGGER_DATA_OFFSET 0x2080
92+
#endif
8893

8994
#ifndef _WIN64
9095
#define DUMP_BLOCK_SIZE 0x20000

0 commit comments

Comments
 (0)