2012-07-24 93 views
1

位置独立代码放置在静态库中时会发生什么? (尤其是在x86-64上)静态库中的fPIC代码:为什么?怎么了?

也就是说:使用PIC生成多个.o文件并将其放置在.a文件中。正常情况下,这个.a被静态链接到最终的可执行文件中。

它似乎工作,但它做到这一点有意义吗?为什么?

什么是最终地址计算完成? (链接时?运行时间?)

谢谢

回答

0

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

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

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

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