int main(int argc, char **argv)
{
  personality(ADDR_NO_RANDOMIZE);

  if (fork())
  {
    return 0;
  }

  printf("Hook me")


我在一个练习中遇到了这段代码。根据我的估计,这应该在子进程上禁用ASLR。但是,我使用LD_PRELOAD在printf上休眠了二进制文件,并在那时附加了gdb。在这一点上,我注意到基于堆栈地址的变化,似乎已启用了ASLR。肯定在父进程中启用了Aslr。

是否应在子进程上禁用ASLR?防止在分叉的孩子中禁用ASLR的代码有什么问题?

最佳答案

这对fork不起作用,因为fork会完全复制父级(启用了ASLR)的地址空间。尝试使用exec,它应该可以工作。

关于c - 以下代码是否禁用ASLR?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38908975/

10-10 17:27