0
我學習了明天要考試,我碰到這個問題跑了:libc.so MMAP strace的
我們運行與strace的下列系統調用的可執行文件後的結果有關標準的C lib目錄下:
- 開放(」 /lib/libc.so.6" , 「O_RDONLY」)= 3
- MMAP(NULL,36803630,PROT_READ | PROT_EXEC,MAP_PRIVATE | MAP_DENYWRITE,3,0)= 0x7f312ab35000
- MMAP(0x7f312aeae000,20480,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_FIXED | MAP_DENYWRITE,3 ,0x179000)= 0x7f312aeae000
問題是爲什麼mmap的第一個系統調用使用PROT_READ | PROT_EXEC,第二個是PROT_READ | PROT_WRITE。
請詳細解釋每次mmap調用後會發生什麼情況。我不明白爲什麼一個進程需要修改libc(寫入權限)。
爲什麼PROT_EXEC消失? –
數據不需要可執行;它是數據,而不是代碼。並且使可寫內存可執行文件被認爲是一種安全風險,因爲它通過允許攻擊者放置代碼而擴展了可以提升爲任意代碼執行的漏洞類別。許多強化系統甚至不允許同時寫入執行權限的內存映射。 –