動態連結器
外觀
動態連結器(Dynamic linker)是作業系統的一部分,負責按照可執行程序運行時的需要裝入與連結共享庫。裝入是指把共享庫在永久存儲上的內容複製到內存,連結是指填充跳轉表(jump table)與重定位指針。
Windows作業系統
[編輯]類Unix作業系統
[編輯]ld.so是Unix或類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覆寫,讓具有特權的應用程式加載惡意動態連結庫,從而導致攻擊行為。所以,對於與setuid或setgid相關的應用程式,動態連結器只被允許在默認目錄中尋找合法動態連結庫。
參考文獻
[編輯]- ^ David A. Wheeler. 找出并保护程序的入口. IBM. 2004年2月10日 [2009年3月21日]. (原始內容存檔於2020年9月14日) (中文).