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