明天我正在读考试,我遇到了这个问题:
在我们使用strace运行可执行文件后,以下系统调用结果与标准C lib:
相关问题是为什么mmap的第一个系统调用使用PROT_READ | PROT_EXEC而第二个调用PROT_READ | PROT_WRITE。
请详细说明每次mmap调用后会发生什么。我不明白为什么一个进程需要修改libc(写访问)。
答案 0 :(得分:1)
地图是私有的(MAP_PRIVATE
),因此没有任何内容正在修改libc.so
;相反,它正在修改从libc.so
映射的页面的私有(到进程)副本。这将包括数据段(libc中的全局变量)以及全局偏移表(GOT)以及在运行时将库重定位到特定地址所涉及的其他结构。