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/