2016-08-12 74 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,它應該可以工作。

相關問題