2012-07-24 90 views
1

位置獨立代碼放置在靜態庫中時會發生什麼? (尤其是在x86-64上)靜態庫中的fPIC代碼:爲什麼?怎麼了?

也就是說:使用PIC生成多個.o文件並將其放置在.a文件中。正常情況下,這個.a被靜態鏈接到最終的可執行文件中。

它似乎工作,但它做到這一點有意義嗎?爲什麼?

什麼是最終地址計算完成? (鏈接時?運行時間?)

謝謝

回答

0

IIRC在PIC系統中所有的全局變量將通過PIC進行訪問。

PIC的整個想法是隻有一個表需要調整(GOT),而不是代碼中的所有全局訪問。

代碼本身與位置無關,因爲它通過GOT訪問,並且GOT的位置(相對於指令的地址)在最終鏈接期間被編碼。

所以這是一個混合。有些是在最後一個鏈接(編碼GOT偏移)期間完成的,有些是在啓動時完成的(GOT重新定位/修復),有些沒有完成(代碼重新定位)。