什麼是GOT(全域偏移表)
彙整外部變數與函式實際位址的表。由動態連結器在執行時填入,位置無關程式碼透過此表進行參照,因此不必改寫程式碼的分頁。
日文名稱: GOT(グローバルオフセットテーブル)
「GOT(全域偏移表)」出現在1領域的5道練習題中(連結器與載入器與執行檔格式等)。
這個名詞所屬的領域: 連結器與載入器與執行檔格式
彙整外部變數與函式實際位址的表。由動態連結器在執行時填入,位置無關程式碼透過此表進行參照,因此不必改寫程式碼的分頁。
日文名稱: GOT(グローバルオフセットテーブル)
「GOT(全域偏移表)」出現在1領域的5道練習題中(連結器與載入器與執行檔格式等)。
這個名詞所屬的領域: 連結器與載入器與執行檔格式
因此每個模組會準備一張排列位址的表(GOT),程式碼以與PC的距離讀取GOT的項目,並使用其中的位址。
關於共用函式庫所使用的GOT(全域偏移表,Global Offset Table)的功用,下列何者正確?在位置獨立程式碼中,函式與資料不是以固定位址參照,而是透過與PC的距離,或彙整位址的表(GOT)來參照。
關於位置獨立程式碼(PIC),下列說明何者正確?在延遲繫結中,第一次呼叫時入口會跳到動態連結器的解析處理,尋找真正的位址並寫入GOT。
在動態連結中,使用PLT(程序連結表,Procedure Linkage Table)進行延遲繫結(lazy bind…若是動態連結,則會改寫為指向PLT的入口,而實際的函式庫函式位址由動態連結器在執行時填入GOT。
對目的檔進行反組譯時,發現呼叫外部函式printf之指令的跳躍目標是0這樣的暫時值。這個值會在何時被正確填入?共用函式庫中公開的符號,可能被其他模組中的同名定義所取代,因此即使是內部的呼叫也必須經過PLT或GOT。
建置共用函式庫時,只公開要從外部使用的函式,並將內部函式的符號可見性(visibility)設為「hidden」,其優…動態連結器(Dynamic linker) PLT(程序連結表) 動態連結(Dynamic linking) 目的檔(Object file) 重定位(Relocation) 連結器(Linker) ABI(應用程式二進位介面) 共享函式庫(Shared library) 名稱修飾(Name mangling) 位置無關程式碼(Position-independent code)