動態連結器

維基百科,自由的百科全書
(重新導向自Ld.so

動態連結器(Dynamic linker)是作業系統的一部分,負責按照可執行程序運行時的需要裝入與連結共享庫。裝入是指把共享庫在永久存儲上的內容複製到內存,連結是指填充跳轉表(jump table)與重定位指針。

Windows作業系統[編輯]

類Unix作業系統[編輯]

ld.soUnix類Unix系統上的動態連結器,針對ELF文件格式

加載順序[編輯]

應用程式需要使用動態連結庫里的函數時,由ld.so負責加載。搜索動態連結庫的順序依此是

  • 環境變量LD_AOUT_LIBRARY_PATH(dbg版本)、LD_LIBRARY_PATH(release版本);在Linux中,LD_PRELOAD指定的目錄具有最高優先權[1]
  • 緩存文件/etc/ld.so.cache。此為上述環境變量指定目錄的二進制索引文件。更新緩存的命令是ldconfig
  • 默認目錄,先在/lib中尋找,再到/usr/lib中尋找。

安全性[編輯]

駭客可以通過GOT覆寫英語Global offset table,讓具有特權的應用程式加載惡意動態連結庫,從而導致攻擊行為。所以,對於與setuidsetgid相關的應用程式,動態連結器只被允許在默認目錄中尋找合法動態連結庫

參考文獻[編輯]

  1. ^ David A. Wheeler. 找出并保护程序的入口. IBM. 2004年2月10日 [2009年3月21日]. (原始內容存檔於2020年9月14日) (中文).