2

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

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

它似乎有效,但这样做有意义吗?为什么?

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

谢谢

4

1 回答 1

0

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

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

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

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

于 2012-08-20T10:46:08.330 回答