可以有人向我指出关于Linux和Windows所使用的虚拟内存映射的一些文档吗?我的意思是在一个典型的进程中,哪些虚拟地址、代码、可写静态数据、堆栈以及堆(连同其他内核位)通常会被放置在哪里。
在Linux上获取进程内存映射的最佳方法可能是查看/proc//maps文件。可以清楚地看到,对于每个可执行文件或共享对象,都有可执行代码、常量静态数据和可写静态数据的独立部分。每个这些部分都存在于自己的内存页面中,这使得Linux能够在可执行文件之间共享部分,甚至实现像写时复制这样的功能。
除此之外,还有一个专门用于堆栈的部分和一个专门用于堆的部分。还可能有一些匿名的部分。
维基百科关于地址空间布局随机化(ALSR)的条目描述了如何通过随机分配地址空间来保护免受各种攻击,并且数据和代码之间的重要性也有所不同。
它描述了Linux默认的弱随机化级别以及您可以使用的补丁来加强它。
它还描述了哪些版本的Windows提供它,以及它仅适用于某些代码和可执行文件。