????
Win 10 x64 内核之 寻找KdVersionBlock
- 一、_KPCR
- 二、_DBGKD_GET_VERSION64
- 总结
找这个的目的是什么的就不说了。
提示:以下是本篇文章正文内容,下面案例可供参考
一、_KPCR
由于Windows需要支持多个CPU, 因此Windows内核中为此定义了一套以处理器控制区(Processor Control Region)即KPCR为枢纽的数据结构, 使每个CPU都有个KPCR. 其中KPCR这个结构中有一个域KPRCB(Kernel Processor Control Block)结构, 这个结构扩展了KPCR. 这两个结构用来保存与线程切换相关的全局信息.
其数据结构参见 链接

首先 看被调试的机器有几个CPU
dd nt!kenumberprocessors l1
有4个

!pcr 0

入口在fffff8005a974000
dt _kpcr fffff8005a974000

网上资料说x86下的K的VersionBlock在0号CPU,其他三个CPU也看了,均没有kdversionblock。可能x64结构发生了变化吧~~~~
百度、google也看了,没有找到,可能是我没搜到罢了。
二、_DBGKD_GET_VERSION64
kdversionblock指向的是一个DBGKD_GET_VERSION64结构。

我们最想要的就是最后一个DebuggerDataList指向的地址了。
去msdn上看了一下,有发现!
说一下DebuggerDataList指向的数据结构。
参考网上资料。

该结构体很大,里面有很多未导出的系统变量,所以还是比较有价值的。

从WinDbg找一下呢,果然找到了,前面是两个指针,前指针和后指针,4字节的tag,4字节的size。
dd nt!KdDebuggerDataBlock

根据资料,该数据结构除了头部,第一个重要的成员就是内核基址。
ULONG64 KernBase;//第一个
···
ULONG64 PsLoadedModuleList;
···
ULONG64 MmUnloadedDrivers;
ULONG64 MmLastUnloadedDriver;
db fffff8005e800000

MZ头,插桩都有了,那说明没错了,找到了
这是MmUnloadedDrivers和MmLastUnloadedDriver的地址,再验证一下。

dd fffff8005f400b20 L380 380是展示多少个字节

总结
尝试自己动手,也许也可以成功!
最后
以上就是犹豫白昼最近收集整理的关于WinDbg x64内核之寻找KdVersionBlock一、_KPCR二、_DBGKD_GET_VERSION64总结的全部内容,更多相关WinDbg内容请搜索靠谱客的其他文章。
发表评论 取消回复