【发布时间】:2010-08-26 21:35:37
【问题描述】:
谁能给我一些关于用于 Linux 和 Windows 的虚拟内存映射的文档。我的意思是,在典型进程中,通常会放置哪些虚拟地址、代码、可写静态数据、堆栈和堆(以及其他内核位)?
【问题讨论】:
谁能给我一些关于用于 Linux 和 Windows 的虚拟内存映射的文档。我的意思是,在典型进程中,通常会放置哪些虚拟地址、代码、可写静态数据、堆栈和堆(以及其他内核位)?
【问题讨论】:
自从 ASLR 出现以来,它主要是在随机虚拟地址上。
【讨论】:
在 Linux 上获取进程内存映射的最佳方法可能是查看 /proc//maps 文件。可以清楚地看到,对于每个可执行文件或共享对象,可执行文件、const 静态数据和可写静态数据都有单独的部分。这些部分中的每一个都存在于自己的内存页面中,这允许 Linux 在可执行文件之间共享部分,甚至实现写时复制等功能。
除此之外,还有一个专用于堆栈的部分和一个专用于堆的部分。也可能有一些匿名部分。
【讨论】:
Address Space Layout Randomisation (ALSR) 上的维基百科条目描述了地址空间的随机分配如何防止各种攻击,以及数据和代码之间的重要性有何不同。
它描述了 Linux 默认的弱随机化水平,以及一个可以用来加强它的补丁。
它还描述了哪些版本的 Windows 提供它,以及它如何仅适用于某些代码和可执行文件。
【讨论】: