連結器與載入器與執行檔格式

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

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

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

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

  • A. 不是目錄,而是位址的表。
  • B. 與快取無關。
  • C. 正確。被改寫的只有資料的表,程式碼不會被改寫。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 在動態連結中,使用PLT(程序連結表,Procedure Linkage Table)進行延遲繫結(lazy binding)時,下列說明何者正確?
  2. 在Linux等系統中啟動動態連結的程式時,動態連結器(ld.so等)的功用,下列何者正確?
  3. 關於ASLR(位址空間配置隨機化)的目的,下列何者正確?
  4. 將執行檔建置為PIE(位置獨立執行檔)的主要理由為下列何者?
  5. 啟動程式時(Linux的execve等),作業系統的載入器所進行的事項,下列何者正確?

這個領域的比較