【发布时间】:2018-08-12 16:24:40
【问题描述】:
对于 Windows x64 上的内核空间虚拟地址 (VA > 0xFFFF000000000000),从虚拟地址到物理地址的转换如何工作?
我知道它如何用于用户空间虚拟地址:VA 由多个表中的多个索引组成,第一个 (PML4) 位于存储在CR3 寄存器中的物理地址(以及进程DirectoryTableBase在 WinDbg 中又称为“DirBase”)。我猜这对于内核空间 VA 来说是类似的,但是它们的 PML4 表在哪里呢?
我的目标是在不依赖 DbgEng/WinDbg API 的情况下解析内核故障转储。我已经能够分辨出每个内存页面在文件中的位置,但是转储文件中的大多数字段都以内核空间 VA 表示。该文件头中的DirectoryTableBase字段与触发崩溃的用户空间进程有关,因此没有帮助。
【问题讨论】:
-
“没有 DbgEng API” - 为什么?
-
@ThomasWeller 对于性能、好奇心和便携性。特别是,使用 SearchVirtual() 比在转储文件中搜索并将文件偏移量转换为物理/虚拟地址要慢。
标签: windows kernel 64-bit windbg virtual-address-space