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

时间:2011-11-17 17:07:59

标签: c linux gcc x86

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

请注意,我说的是在执行fork之后我没有调用execve函数的情况。

1 个答案:

答案 0 :(得分:10)

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

如果孩子和家长打电话给mmap(NULL, ...)那么他们的地址地图就会开始分歧。

更新

  

你的陈述不矛盾吗?

完全没有。在fork之后,父地址和子地址空间立即相同(这是fork所做的定义)。但ASLR对父母和孩子仍然有效。随机化不能“回溯到时间”并随机化已经做出的决定,但任何未来的决定(例如下一个mmap的位置将被随机化,并且可能会导致父母和孩子的结果不同。

  

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

也许你不明白ASLR是什么?

简而言之,在启用ASLR的情况下,操作系统将为andomize placement of main stack, and placement of any non-MAP_FIXED mmaps

fork时,主堆栈的位置早已确定,因此父级和子级将具有相同的位置。未来mmap是ASLR未来可以(并且将会)受到影响的唯一事物。