【发布时间】:2020-09-02 08:17:07
【问题描述】:
我使用静态链接来生成可执行目标文件,并使用readelf检查文件,发现有一个部分名为:.rela.plt
关键字“rela”表示这与重定位有关。但是由于我使用的是静态链接,没有使用任何共享库,所以输出的可执行文件应该是一个完全链接的可执行文件,那为什么这个文件还包含重定位信息呢?
【问题讨论】:
我使用静态链接来生成可执行目标文件,并使用readelf检查文件,发现有一个部分名为:.rela.plt
关键字“rela”表示这与重定位有关。但是由于我使用的是静态链接,没有使用任何共享库,所以输出的可执行文件应该是一个完全链接的可执行文件,那为什么这个文件还包含重定位信息呢?
【问题讨论】:
运行时重定位可以通过两种方式最终出现在静态链接的程序中。
R_X86_64_IRELATIVE 重定位。-static-pie)。由于地址空间布局随机化,加载地址因程序运行而异,因此任何包含指针的全局数据对象都需要在运行时重新定位。在 x86-64 上,这些重定位显示为 R_X86_64_RELATIVE。(在更隐蔽的目标上,静态链接程序中可能还有其他需要重定位的东西。)
【讨论】: