在Windows内核地址空间中将虚拟地址转换为物理地址
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows内核地址空间中将虚拟地址转换为物理地址相关的知识,希望对你有一定的参考价值。
在Windows x64上,从虚拟地址到物理地址的转换如何适用于内核空间虚拟地址(VA> 0xFFFF000000000000
)?
我知道它对于用户空间虚拟地址是如何工作的:VA由多个表中的多个索引组成,第一个(PML4)位于存储在CR3
寄存器中的物理地址(以及WinDbg中的进程DirectoryTableBase
又名“DirBase”) 。我猜这对于内核空间VA来说是类似的,但是它们的PML4表在哪里呢?
我的目标是解析内核崩溃转储,而不依赖于DbgEng / WinDbg API。我已经能够分辨文件中每个内存页面的位置,但转储文件中的大多数字段都以内核空间VA表示。该文件头中的DirectoryTableBase
字段与触发崩溃的用户空间进程相关,因此它没有帮助。
答案
回答我自己的问题:每个(用户空间)进程的PML4表确实包含内核空间VA的映射。这非常违反直觉,因为这意味着操作系统在添加或删除高级别VA范围时必须更新每个进程的PML4表。
另外,如果您打算自己实施VA到PA转换,请考虑x64上的虚拟页面大小可以是4 KB,2 MB或1 GB。我忘了它,这就是为什么我被卡住并问这个问题-_-
以上是关于在Windows内核地址空间中将虚拟地址转换为物理地址的主要内容,如果未能解决你的问题,请参考以下文章