跳至內容

動態鏈接器

維基百科,自由的百科全書

動態鏈接器(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日) (中文).