【问题标题】:what's .rela.plt section in executable object files?什么是可执行目标文件中的 .rela.plt 部分?
【发布时间】:2020-09-02 08:17:07
【问题描述】:

我使用静态链接来生成可执行目标文件,并使用readelf检查文件,发现有一个部分名为:.rela.plt

关键字“rela”表示这与重定位有关。但是由于我使用的是静态链接,没有使用任何共享库,所以输出的可执行文件应该是一个完全链接的可执行文件,那为什么这个文件还包含重定位信息呢?

【问题讨论】:

标签: c gcc linker elf readelf


【解决方案1】:

运行时重定位可以通过两种方式最终出现在静态链接的程序中。

  • GNU 工具链支持在运行时使用IFUNC mechanism 选择不同的函数实现。在 x86-64 上,这些显示为 R_X86_64_IRELATIVE 重定位。
  • 一些目标支持静态链接位置无关的可执行文件(通过 GNU 工具链中的-static-pie)。由于地址空间布局随机化,加载地址因程序运行而异,因此任何包含指针的全局数据对象都需要在运行时重新定位。在 x86-64 上,这些重定位显示为 R_X86_64_RELATIVE

(在更隐蔽的目标上,静态链接程序中可能还有其他需要重定位的东西。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多