Windows 虚拟地址 到底是如何映射到 物理地址 的?

一:背景

1. 讲故事

我发现有很多的 .NET程序员 写了很多年的代码都没弄清楚什么是 虚拟地址,更不用谈什么是 物理地址 以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的联系。

二:地址映射研究

1. 找虚拟地址

怎么去找 虚拟地址 呢?相信很多朋友都知道应用程序用的是虚拟地址,所以从应用程序中取一个就好了,这里就拿 notepad 举例子吧。

开启一个装有 win10 的虚拟机,然后打开 notepad.exe,使用 windbg 进行它的内核态调式,参考代码如下:


0: kd> !process 0 0 notepad.exe
PROCESS ffffe0011f9c9840
    SessionId: 1  Cid: 11a8    Peb: 7ff63d8ff000  ParentCid: 0bf4
    DirBase: 23c6d000  ObjectTable: ffffc00088bdcbc0  HandleCount: <Data Not Accessible>
    Image: notepad.exe

0: kd> .process /i /p ffffe0011f9c9840
You need t