以下代码是否禁用ASLR?

时间:2016-08-12 02:34:10

标签: c aslr

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在分叉孩子中被禁用的错误是什么?

1 个答案:

答案 0 :(得分:1)

这不适用于fork,因为fork生成父级(启用ASLR)地址空间的精确副本。请尝试使用exec,它应该有效。