这可能是一个重复的问题。我想知道windows进程的内存映射是什么样的?我正在寻找细节。请提供博客、文章和其他相关文献的链接。
我总是喜欢能够真正看到事物,而不仅仅是阅读理论。事实证明,根据这篇博文 http://www.nynaeve.net/?p=88,如果您使用 Windbg 打开一个程序,即使它没有运行,它仍然会像运行时一样映射到地址空间。因此,您的反汇编窗口象征性地(不保证在这些确切的地址加载您的代码)以代码形式向您显示这些地址中的内容:
当然,由于 ASLR,您无法保证这些地址,但它给您一个想法/让您思考:内存地址也只是代码。代码和内存存储在同一(虚拟)空间中,按照冯·诺依曼 http://en.wikipedia.org/wiki/Von_Neumann_architecture大多数现代计算机实现的体系结构。不幸的是,由于没有堆栈、堆等,你无法移动并查看它们。
This 来自微软的博客文章 https://techcommunity.microsoft.com/t5/ask-the-performance-team/memory-management-x86-virtual-address-space/ba-p/372536为您提供虚拟地址空间的高级概述。正如您所看到的,其中一半保留供操作系统使用,另一半您可以填写您拥有的任何内容(代码,malloc
调用、堆栈分配等)。
就地址空间在用户端的工作方式而言,这个图 http://www.cs.uleth.ca/~holzmann/C/system/memorylayout.gif帮助我理解了它。已链接在这个问题中 https://stackoverflow.com/questions/1966920/more-info-on-memory-layout-of-an-executable-program-process它提供了一系列关于各种可能的地图的不错的链接。但请记住,内存中的布局会因部件而异。
要记住的重要一点是,所有这些,程序,数据,堆栈,堆,内核的东西,都是一个大的连续的内存地址系列,尽管它们实际上可能会或可能不会转换为实际的内存地址。
当您使用它时,您可能还会对可执行文件在磁盘上的显示方式感兴趣。本文 http://msdn.microsoft.com/en-us/magazine/ms809762.aspx and 这篇文章特别 http://msdn.microsoft.com/en-us/magazine/cc301805.aspx提供对PE文件格式的一些深入分析。后一篇文章还有一个小图表,大致显示了数据是如何进行 mmap 的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)