關於DLL路徑載入順序的問題

2021-06-18 22:14:06 字數 1130 閱讀 4040

預設系統xp,安全搜尋模式(hklm\system\currentcontrolset\control\session manager\safedllsearchmode值為0時為非安全,其餘情況為安全,xp後系統支援)。

一、標準的dll路徑載入

例如隱式載入,或者如下的顯示載入:

loadlibraryex(_t("saya.dll"), null, load_with_altered_search_path);,則載入順序(一般標準的dll路徑載入)為:

1.包含可執行檔案的目錄。

2.如果通過setdlldirectory設定了路徑。則搜尋該路徑,並不再搜尋第6步。(xp後支援,比如vc6無該介面)

3.windows系統目錄,即c:\windows\system32

4.16位系統目錄,即c:\windows\system

5.windows目錄,即c:\windows

6.程序當前目錄。(非安全方式載入時則為第2個載入)

7.path環境變數中所列目錄。

二、絕對路徑載入

使用loadlibraryex顯示載入dll時,如果路徑引數為絕對路徑,則loadlibraryex試圖直接按照絕對路徑載入dll檔案,如果對應檔案不存在,則載入失敗,不會再搜尋其他地方。

三、相對路徑載入:

假設載入的相對路徑為path,則載入順序為:

1.程序當前目錄+path。

2.通過setdlldirectory所設定的路徑+path。(xp後支援,比如vc6無該介面)

3.windows系統目錄+path,即c:\windows\system32+path

4.16位系統目錄+path,即c:\windows\system+path

5.windows目錄+path,即c:\windows+path

6.path環境變數中所列目錄+path。

注:測試第三種時,發現對於"..\\saya.dll",".\\a\\saya.dll","./a./saya.dll",".\\a/saya.dll"分別測試,結果都很奇怪。比如第1個,首次搜尋的為當前目錄的上兩級目錄,第2個,不會在當前目錄中尋找"a/saya.dll",而第4個則可以。第3個則首次搜尋的感覺是將執行檔案所在的目錄作為第乙個搜尋路徑。

DLL載入順序

最近碰到了乙個問題,要引入乙個第三方的sdk,但是sdk中使用的一些dll和我原本程式裡面有些dll是同名的,而且本程式的dll和sdk的dll名稱都不能修改。解決這個問題,首先想到的就是多程序,這就用到了我們之前開發的乙個專門用來託管dll的程序。先是將sdk打包到另外乙個單獨的目錄 因為與本程式...

DLL載入順序劫持

動態鏈結庫搜尋順序 win32應用 微軟文件 技術分享 dll劫持 老樹開新花 dll劫持漏洞新玩法 h2z 深入解析dll劫持漏洞 wooyun知識庫 一種通用dll劫持技術研究 程式語言區 吾愛破解 lcg lsg 安卓破解 病毒分析 破解軟體 www.52pojie.cn 這個鏈結裡的內容沒看...

關於axios請求載入順序問題

axios併發請求 多個介面請求,賦值問題 這裡用到 axios 併發請求 兩個方法 axios.all axios.spread 呼叫方法 axios.all axios.get xx test.json axios.post post.json then axios.spread getdata...