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在分叉孩子中被禁用的错误是什么?
答案 0 :(得分:1)
这不适用于fork
,因为fork
生成父级(启用ASLR)地址空间的精确副本。请尝试使用exec
,它应该有效。