如何解决可执行目标文件中的.rela.plt节是什么?
我使用静态链接生成可执行对象文件,并使用readelf
检查文件,发现其中一个部分称为:.rela.plt
关键字“ rela”表示这与重定位有关。但是由于我使用静态链接,而不使用任何共享库,因此输出可执行文件应该是完全链接的可执行文件,那么为什么该文件仍包含重定位信息?
解决方法
在静态链接程序中,有两种方法可以使运行时重定位结束。
- GNU工具链支持在运行时使用IFUNC mechanism选择不同的函数实现。在x86-64上,这些显示为
R_X86_64_IRELATIVE
重定位。 - 某些目标支持静态链接的位置无关可执行文件(通过GNU工具链中的
-static-pie
)。由于由于地址空间布局随机化,加载的地址因程序而异,因此,包含指针的任何全局数据对象都需要在运行时进行重定位。在x86-64上,这些重定位显示为R_X86_64_RELATIVE
。
(在其他情况下,在静态链接程序中可能还有其他需要重定位的地方。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。