什麼是GOT(全域偏移表)

彙整外部變數與函式實際位址的表。由動態連結器在執行時填入,位置無關程式碼透過此表進行參照,因此不必改寫程式碼的分頁。

日文名稱: GOT(グローバルオフセットテーブル)

「GOT(全域偏移表)」出現在1領域的5道練習題中(連結器與載入器與執行檔格式等)。

這個名詞所屬的領域: 連結器與載入器與執行檔格式

練習GOT(全域偏移表)的題目

關於共用函式庫所使用的GOT(全域偏移表,Global Offset Table)的功用,下列何者正確?

  1. A是將函式庫中的函式名稱依字母順序排列的目錄
  2. B是暫時存放快取放不下的資料的表
  3. C是彙整外部變數與函式之實際位址的表,由動態連結器在執行時填入,程式碼透過這張表來參照
查看答案與解析

正確答案:C. 是彙整外部變數與函式之實際位址的表,由動態連結器在執行時填入,程式碼透過這張表來參照

位置獨立程式碼無法將位於其他函式庫中的變數位址直接寫入指令。因此每個模組會準備一張排列位址的表(GOT),程式碼以與PC的距離讀取GOT的項目,並使用其中的位址。動態連結器在載入時,會將實際位址寫入GOT。被改寫的只有可寫入的資料GOT,因此程式碼的分頁可維持共用。

解析中的「GOT(全域偏移表)」

出現「GOT(全域偏移表)」的題目(5題)

  1. 關於共用函式庫所使用的GOT(全域偏移表,Global Offset Table)的功用,下列何者正確?
  2. 關於位置獨立程式碼(PIC),下列說明何者正確?
  3. 在動態連結中,使用PLT(程序連結表,Procedure Linkage Table)進行延遲繫結(lazy binding)時,下列說明何者正確?
  4. 對目的檔進行反組譯時,發現呼叫外部函式printf之指令的跳躍目標是0這樣的暫時值。這個值會在何時被正確填入?
  5. 建置共用函式庫時,只公開要從外部使用的函式,並將內部函式的符號可見性(visibility)設為「hidden」,其優點下列何者正確?

相關名詞

動態連結器(Dynamic linker) PLT(程序連結表) 動態連結(Dynamic linking) 目的檔(Object file) 重定位(Relocation) 連結器(Linker) ABI(應用程式二進位介面) 共享函式庫(Shared library) 名稱修飾(Name mangling) 位置無關程式碼(Position-independent code)

前往名詞解釋列表