进程内存映射 (Linux Windows)

Posted

技术标签:

【中文标题】进程内存映射 (Linux Windows)【英文标题】:Process Memory Map (Linux Windows) 【发布时间】:2010-08-26 21:35:37 【问题描述】:

谁能给我一些关于用于 Linux 和 Windows 的虚拟内存映射的文档。我的意思是,在典型进程中,通常会放置哪些虚拟地址、代码、可写静态数据、堆栈和堆(以及其他内核位)?

【问题讨论】:

【参考方案1】:

自从 ASLR 出现以来,它主要是在随机虚拟地址上。

【讨论】:

这是实际块部分的组织方式还是代码块本身中可重定位功能的具体组织方式? 是内存映射,大致对应代码、数据和栈段。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

Address Space Layout Randomisation (ALSR) 上的***条目描述了地址空间的随机分配如何防止各种攻击,以及数据和代码之间的重要性有何不同。

它描述了 Linux 默认的弱随机化水平,以及一个可以用来加强它的补丁。

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

【讨论】:

细节相当少。如果可能的话,我热衷于带有地址的图表。 如果你正在寻找像过去那样的内存映射,例如 Commodore 64(比如这个sta.c64.org/cbm64mem.html),我想你会不走运。我认为它不再那样工作了。

以上是关于进程内存映射 (Linux Windows)的主要内容,如果未能解决你的问题,请参考以下文章

内存映射

10分钟了解什么是内存映射MMAP!

两个进程之间的命名共享内存

Windows 进程的内存映射是啥样的?

Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )

Linux 内核 内存管理内存管理系统调用 ⑤ ( 代码示例 | 多进程共享 mmap 内存映射示例 )