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