【问题标题】:fPIC code in a static library: Why? What happens?静态库中的 fPIC 代码:为什么?发生什么了?
【发布时间】:2012-07-24 17:38:43
【问题描述】:

将位置无关代码放入静态库时会发生什么? (特别是在 x86-64 上)

也就是说:用PIC生成几个.o文件,放在一个.a文件中。这个.a 像往常一样静态链接到最终的可执行文件中。

这似乎可行,但这样做有意义吗?为什么?

最后的地址计算是怎么做的? (链接时间?运行时间?)

谢谢

【问题讨论】:

    标签: linker solaris x86-64 relocation fpic


    【解决方案1】:

    PIC系统中的IIRC所有全局变量都将通过PIC访问。

    PIC 的整体理念是只需要调整一个表(GOT),而不是代码中的每个全局访问。

    代码本身是位置无关的,因为它通过 GOT 访问,并且 GOT 的位置(相对于指令的地址)在最终链接期间被编码。

    所以这是一个混合体。有些是在最终链接期间完成的(编码 GOT 偏移),有些是在启动时完成的(GOT 重定位/修复),还有一些没有完成(代码重定位)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2014-05-13
      • 2017-12-27
      • 2018-11-12
      • 2018-07-28
      • 1970-01-01
      相关资源
      最近更新 更多