2016-08-12 51 views
0
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吗?代码阻止ASLR在分叉子中被禁用有什么问题?

回答

1

这将不会与fork一起使用,因为fork会对父节点(启用ASLR)的地址空间进行精确复制。改为使用exec,它应该可以工作。