创建进程时虚拟内存的样子 [Windows]?

How virtual memory looks like when a process is created [Windows]?

前几天有人问我这个问题,我在网上找不到详细的图片,显示创建进程时虚拟内存的样子。

假设进程 "program.exe" 已经创建。

您如何使用嵌入图像描述内存布局?

您能否展示并描述此布局中 "program.exe" 本身在哪里,导入的 DLL 在哪里,堆、堆栈在哪里,内核中发生了什么,等等

我很乐意提供尽可能详细的图像。


清除内存布局:

部分填充的内存布局(顺序并不重要):

见下图this article

内核内存与新进程无关。

与用户 space 内存不同,每个进程都有自己的映射,内核 space 内存只有一个映射。当一个线程在内核模式下运行时,它总是看到相同的地址 space,而不管它属于哪个进程。