进程内存映射(Linux Windows)

5

可以有人向我指出关于Linux和Windows所使用的虚拟内存映射的一些文档吗?我的意思是在一个典型的进程中,哪些虚拟地址、代码、可写静态数据、堆栈以及堆(连同其他内核位)通常会被放置在哪里。

3个回答

2
自ASLR出现以来,它大多数情况下使用随机虚拟地址。

这是实际的块部分组织方式还是特定可重定位函数在代码块本身中组织的方式? - doron
它是内存映射,大致对应代码、数据和堆栈段。 - ninjalj

2

在Linux上获取进程内存映射的最佳方法可能是查看/proc//maps文件。可以清楚地看到,对于每个可执行文件或共享对象,都有可执行代码、常量静态数据和可写静态数据的独立部分。每个这些部分都存在于自己的内存页面中,这使得Linux能够在可执行文件之间共享部分,甚至实现像写时复制这样的功能。

除此之外,还有一个专门用于堆栈的部分和一个专门用于堆的部分。还可能有一些匿名的部分。


1

维基百科关于地址空间布局随机化(ALSR)的条目描述了如何通过随机分配地址空间来保护免受各种攻击,并且数据和代码之间的重要性也有所不同。

它描述了Linux默认的弱随机化级别以及您可以使用的补丁来加强它。

它还描述了哪些版本的Windows提供它,以及它仅适用于某些代码和可执行文件。


它的细节相当少。如果可能的话,我很想看到带有地址的图表。 - doron
如果你正在寻找像旧时代的记忆地图,例如Commodore 64(例如这个http://sta.c64.org/cbm64mem.html),我想你会很失望。我认为现在已经不是那样了。 - Oddthinking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接