什麼是PLT(程序連結表)

排列了呼叫共享函式庫函式所用的小型入口的表。在延遲繫結中,第一次呼叫時由動態連結器解析位址並寫入 GOT。

日文名稱: PLT(プロシージャリンケージテーブル)

「PLT(程序連結表)」出現在1領域的3道練習題中(連結器與載入器與執行檔格式等)。

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

練習PLT(程序連結表)的題目

在動態連結中,使用PLT(程序連結表,Procedure Linkage Table)進行延遲繫結(lazy binding)時,下列說明何者正確?

  1. A共用函式庫函式的位址,在該函式第一次被呼叫時才解析,第二次起直接跳到已解析的位址
  2. B在程式啟動前,一定會先解析所有函式的位址
  3. C每次呼叫函式時,都會從磁碟重新讀取函式庫的檔案
查看答案與解析

正確答案:A. 共用函式庫函式的位址,在該函式第一次被呼叫時才解析,第二次起直接跳到已解析的位址

程式是透過PLT的小入口來呼叫外部函式。在延遲繫結中,第一次呼叫時入口會跳到動態連結器的解析處理,尋找真正的位址並寫入GOT。第二次起則直接跳到GOT中的位址。可省去對未使用函式的解析,因此啟動較快。不過基於安全考量,在啟動時全部解析並將GOT設為唯讀的設定也被廣泛使用。

解析中的「PLT(程序連結表)」

出現「PLT(程序連結表)」的題目(3題)

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

相關名詞

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

前往名詞解釋列表