在 x64 Windows 7 上,我想获得非分页池的限制。我知道 _KDDEBUGGER_DATA64 结构有这个信息(像 MmNonPagedPoolStart 和 MmNonPagedPoolEnd 这样的字段)。在 x86 系统上,此结构是从 KPCR.KdVersionBlock 获得的,但在 x64 系统上使用 WinDbg 查找 KPCR 时,KdVersionBlock 似乎始终为空。
有没有办法获得这种结构?或者另一种获得我想要的东西的方式?也许我没有找对地方。
在 x64 Windows 7 上,我想获得非分页池的限制。我知道 _KDDEBUGGER_DATA64 结构有这个信息(像 MmNonPagedPoolStart 和 MmNonPagedPoolEnd 这样的字段)。在 x86 系统上,此结构是从 KPCR.KdVersionBlock 获得的,但在 x64 系统上使用 WinDbg 查找 KPCR 时,KdVersionBlock 似乎始终为空。
有没有办法获得这种结构?或者另一种获得我想要的东西的方式?也许我没有找对地方。
nt!KdDebuggerDatablock 曾经是 NT 中的公共全局符号
lkd> x/v nt!KdDebuggerDataBlock
pub global 80545b60 0 nt!KdDebuggerDataBlock = <no type information>
dpS nt!KdDebuggerDataBlock lxxxx 应该获取 NonPagedPoolStart
lkd> !grep -i -c "dpS nt!KdDebuggerDataBlock la5" -e "pool"
8055b5a0 nt!ExpPagedPoolDescriptor
8054ab2c nt!ExpNumberOfPagedPools
nt!MmMaximumNonPagedPoolInBytes
80553cb8 nt!MmNonPagedPoolStart
这应该得到完整的结构
lkd> .printf "%ma\t%08x\n" , nt!KdDebuggerDataBlock+10,poi(nt!KdDebuggerDataBlock+14)
KDBG 00000290
lkd> .for (r $t0=0 ; @$t0 <poi(nt!KdDebuggerDataBlock + 14) ; r $t0 = @$t0+4) { .printf "%08x\t%08x\t%y\n", (nt!KdDebuggerDataBlock + @$t0) ,poi(nt!KdDebuggerDataBlock + @$t0) ,poi(nt!KdDebuggerDataBlock + @$t0) }