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消失? –
数据不需要可执行;它是数据,而不是代码。并且使可写内存可执行文件被认为是一种安全风险,因为它通过允许攻击者放置代码而扩展了可以提升为任意代码执行的漏洞类别。许多强化系统甚至不允许同时写入执行权限的内存映射。 –