在Windows内核地址空间中将虚拟地址转换为物理地址

问题描述 投票:0回答:1

在Windows x64上,从虚拟地址到物理地址的转换如何适用于内核空间虚拟地址(VA> 0xFFFF000000000000)?

我知道它对于用户空间虚拟地址是如何工作的:VA由多个表中的多个索引组成,第一个(PML4)位于存储在CR3寄存器中的物理地址(以及WinDbg中的进程DirectoryTableBase又名“DirBase”) 。我猜这对于内核空间VA来说是类似的,但是它们的PML4表在哪里呢?

我的目标是解析内核崩溃转储,而不依赖于DbgEng / WinDbg API。我已经能够分辨文件中每个内存页面的位置,但转储文件中的大多数字段都以内核空间VA表示。该文件头中的DirectoryTableBase字段与触发崩溃的用户空间进程相关,因此它没有帮助。

windows kernel 64bit windbg virtual-address-space
1个回答
1
投票

回答我自己的问题:每个(用户空间)进程的PML4表确实包含内核空间VA的映射。这非常违反直觉,因为这意味着操作系统在添加或删除高级别VA范围时必须更新每个进程的PML4表。

另外,如果您打算自己实施VA到PA转换,请考虑x64上的虚拟页面大小可以是4 KB,2 MB或1 GB。我忘了它,这就是为什么我被卡住并问这个问题-_-

© www.soinside.com 2019 - 2024. All rights reserved.