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

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

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

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

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

  • A. 正確。可省去對未使用函式的解析。
  • B. 那是在啟動時全部解析的方式(立即繫結)。
  • C. 不會從磁碟重新讀取。
練習這個領域 前往領域頁面

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

  1. 在Linux等系統中啟動動態連結的程式時,動態連結器(ld.so等)的功用,下列何者正確?
  2. 關於ASLR(位址空間配置隨機化)的目的,下列何者正確?
  3. 將執行檔建置為PIE(位置獨立執行檔)的主要理由為下列何者?
  4. 啟動程式時(Linux的execve等),作業系統的載入器所進行的事項,下列何者正確?
  5. 關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?

這個領域的比較