Windows进程的内存映射如何?

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

这可能是重复的问题。我想知道Windows进程的内存映射如何?我正在寻找细节。请提供指向博客,文章和其他相关文献的链接。

windows memory-management low-level memory-layout
1个回答
10
投票

我总是喜欢实际能够看到事物,而不仅仅是阅读理论。事实证明,根据this blog post,即使您未使用windbg打开程序,即使该程序未运行,该程序仍会被映射到地址空间。因此,您的反汇编窗口以图形方式表示(不保证将代码加载到这些确切的地址上),以代码的形式向您显示这些地址处的内容:

“

当然,由于使用ASLR,您不能保证这些地址,但是它给了您一个主意/让您思考:内存地址也只是代码。根据大多数现代计算机实现的Von Neumann架构,代码和内存存储在相同的(虚拟)空间中。不幸的是,由于没有堆栈,堆等,您无法移动并查看它们。

blog post from Microsoft为您提供虚拟地址空间的高级概述。如您所见,其中一半保留给操作系统使用,另一半则可以用您拥有的所有内容(代码,malloc调用,堆栈分配等)填充。

关于地址空间在用户端的工作方式,this diagram帮助我理解了它。它的链接in this question提供了一系列有关各种可能地图的体面链接。但是请记住,内存中的布局在部件方面会有所不同。

要记住的重要一点是,所有这些,程序,数据,堆栈,堆,内核内容都是一个较大的顺序存储器地址序列,尽管这些地址实际上可能转换为实际的存储器地址,也可能未转换为实际的存储器地址。

虽然您正在使用它,但您可能也对可执行文件在磁盘上的显示方式感兴趣。 This articlethis article particularly提供了一些PE文件格式的深入分析。后一篇文章也有一个小图,大致显示了如何映射数据。

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