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