c - 地址空间布局随机化是否应用于 fork 进程

标签 c linux gcc x86

假设我从另一个进程中 fork 了一个进程。地址空间布局随机化 (ASLR) 是否会应用于已设置 ASLR 的操作系统中?

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

最佳答案

是的。

但是请注意,在 fork 之后, parent 和 child 都应用了相同的随机化(毕竟他们是彼此的副本!)。

如果 child 和 parent 要调用 mmap(NULL, ...)然后他们的地址映射将开始分歧。

更新:

Isn't your statement contradictory?

完全没有。在 fork 之后,父地址空间和子地址空间是相同的(这就是 fork 所做的定义)。但是 ASLR 对 parent 和 child 仍然有效。随机化不能“回到过去”并随机化已经做出的决定,但任何 future 的决定(例如下一个 mmap 的放置位置)随机化,并且可能会导致 parent 和 child 的不同结果。

Does it have to do with basic mmap or OS writers introduce randomness in mmap as well for security?

也许你不明白什么是ASLR?

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

当您fork 时,主堆栈的位置早已确定,因此父子堆栈将相同。 future 的 mmap 是唯一可以(并且将会)受 ASLR 影响的东西。

关于c - 地址空间布局随机化是否应用于 fork 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8171298/

相关文章:

c - 如何在c中创建proc树

将十六进制字符串转换为 unsigned char[]

linux - 使用 openssl 生成 MD5 哈希的脚本

linux - 哪个不显示可执行文件的实际运行位置

c++ - 为什么 gcc 编译器将 pow(10,2) 输出为 99 而不是 100?

c - C中的结构体和指针

c - 在 c 中打印 wav header

linux - 获取正在运行的服务并输出Linux上的服务版本

c - 使用 ld 链接已编译的程序集和 C 文件

c - 在按位补码的情况下,gcc在整数整数的约束下做什么?负左移计数是做什么的?