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在forked子代中被禁用的代码有什么问题?
发布于 2016-08-12 11:28:56
这不适用于fork,因为fork会精确复制父地址空间(启用了ASLR)。试着用exec代替,它应该可以工作。
https://stackoverflow.com/questions/38908975
复制相似问题