我在我的linux机器上的几个二进制文件上使用了readelf,并在程序头中看到了令我惊讶的东西.这个示例来自'ld'实用程序,但它也出现在我使用gcc编译的任何内容中.
PHDR 0x000034 0x08048034 0x08048034 0x00120 0x00120 RE 0x4
该段跨越整个程序头.为什么被标记为可执行文件?它不包含机器代码.但是,为什么甚至在标题中出现?我真的不想在我的程序图像中.
指向 PHDR 的 PHDR 告诉加载程序 PHDR 本身应该映射到进程地址空间,以便程序本身可以访问它们。
这主要用于动态链接。
内存被标记为可执行的原因是因为 PHDR 小于一页,并且紧挨着可执行代码的开头。如果 PHDR 的权限与程序文本的权限不同,则链接器必须在它们之间插入填充。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |