是否在分叉进程上应用了地址空间布局随机化

Met*_*est 0 c linux x86 gcc

假设我从另一个进程分叉进程.在具有ASLR设置的OS中是否应用地址空间布局随机化(ASLR)?

请注意,我在谈论在执行fork之后我不调用execve函数的情况.

Emp*_*ian 10

是.

但请注意,在fork父母和孩子同时应用相同的随机化之后(毕竟它们是彼此的副本!).

如果孩子和父母要打电话mmap(NULL, ...),那么他们的地址地图将开始分歧.

更新:

你的言论不矛盾吗?

一点也不.紧接着fork,父地址和子地址空间是相同的(这是什么的定义fork).但ASLR对父母和孩子仍然有效.随机化不能"回溯到时间"并随机化已经做出的决定,但任何未来的决定(例如下一步的位置mmap)被随机化,并且可能导致父母和孩子的不同结果.

是否与基本的mmap或OS编写器有关,在mmap中引入随机性以及安全性?

也许你不明白ASLR是什么?

简而言之,在ASLR打开的情况下,操作系统将确定主堆栈的放置和任何非MAP_FIXEDmmaps的放置.

到你的时候fork,主要的堆栈放置已经确定,所以父和子将具有相同的.未来mmap是ASLR 未来可以(并将会)受到影响的唯一事物.