1
位置獨立代碼放置在靜態庫中時會發生什麼? (尤其是在x86-64上)靜態庫中的fPIC代碼:爲什麼?怎麼了?
也就是說:使用PIC生成多個.o
文件並將其放置在.a
文件中。正常情況下,這個.a
被靜態鏈接到最終的可執行文件中。
它似乎工作,但它做到這一點有意義嗎?爲什麼?
什麼是最終地址計算完成? (鏈接時?運行時間?)
謝謝
位置獨立代碼放置在靜態庫中時會發生什麼? (尤其是在x86-64上)靜態庫中的fPIC代碼:爲什麼?怎麼了?
也就是說:使用PIC生成多個.o
文件並將其放置在.a
文件中。正常情況下,這個.a
被靜態鏈接到最終的可執行文件中。
它似乎工作,但它做到這一點有意義嗎?爲什麼?
什麼是最終地址計算完成? (鏈接時?運行時間?)
謝謝
IIRC在PIC系統中所有的全局變量將通過PIC進行訪問。
PIC的整個想法是隻有一個表需要調整(GOT),而不是代碼中的所有全局訪問。
代碼本身與位置無關,因爲它通過GOT訪問,並且GOT的位置(相對於指令的地址)在最終鏈接期間被編碼。
所以這是一個混合。有些是在最後一個鏈接(編碼GOT偏移)期間完成的,有些是在啓動時完成的(GOT重新定位/修復),有些沒有完成(代碼重新定位)。