看板 C_and_CPP 關於我們 聯絡資訊
大家好 我是使用VC 最近遇到一些問題 google不太到想要的答案 也許是關鍵字下的不夠精確 問題是這樣的 我自己在export dll的時候 通常產出的dll 跟對應的lib 關係都是1對1 , 用dumpbin 看dll & lib 所 export的 function 都是一致的 工作上我使用微軟提供的API 讓我產生以下兩個問題 1. (不確定有沒辦法做到)怎麼讓一個lib export的function 是在多個dll裡面而不是單 一dll ? 我exe 設定link A.lib, 實作卻散落在A.dll跟B.dll甚至更多? 2. (確定做得到)怎麼讓一個lib partial export function, 實際上對應的到的dll 可能 export更多 例如我用dumpbin看lib有兩個function, 可是dll卻出現十幾個. 這可能是微軟只想export 某幾個API給user mode使用可是dll卻埋著其他API 真的有心可以用loadlibrary去用, 我自己想到的辦法 難道是DEF檔案先寫要開放的function編譯一次產生partial lib 之後再把全部補上 產生dll給使用者?(應該不可能這樣) 因為我拿到的.h檔案只有兩個function 所以趕到很好奇他怎編譯的 3. 假設我真的發現dll裡面有埋藏一個API想使用看看, 我找不到header 我有沒有辦法得到這個function的完整prototype? 讓我可以用loadlibrary.. symbol table沒有紀錄, 難道就沒辦法得知了嗎? 以上 我以為跟DEF檔案有關連, 但試試看驗證發現我還是無法解釋上面的問題 想請問各位 給我一點hint也好... 感激 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.64.222 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1402394795.A.ECC.html ※ 編輯: QQ29 (219.87.64.222), 06/10/2014 18:23:06
Killercat:別管靜態符號連結了 你看看這個LoadLibraryEx如何(欸 06/10 18:44
Killercat:dlldump可以讓你找到一些訊息 不過C++來講 06/10 18:44
Killercat:symbol的解譯不是非常的...文件化 可能不太好看懂 06/10 18:45
Killercat:說錯 不是dlldump 是dumpbin 太久沒用了囧 06/10 18:46
purpose:2.def file private 3.反組譯看程式碼運行來推測 06/10 19:58
QQ29:LoadLibrary(L"Kernel32.dll"); 06/11 18:13
QQ29:LoadLibrary(L"API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL") 06/11 18:13
QQ29:LoadLibrary(L"API-MS-WIN-CORE-HEAP-L1-2-0.DLL"); 06/11 18:14
QQ29:發現 這三個dll load出來位址一樣...完全無法理解 06/11 18:14
QQ29:我用dependencywalker看,一堆不瞭解的地方,真的是太深奧了 06/11 18:16
QQ29:網路上也找不到這tool顯示資訊的介紹只能猜 06/11 18:17
QQ29:LoadLibrary(L"Kernel32.dll");位址減 06/11 18:19
QQ29: GetProcAddress(handle0, "Loadlibrary"); 也不是我理解的 06/11 18:19
QQ29:載入位址的offset..同樣觀念套在自己做的dll就OK... 06/11 18:19
QQ29:不知微軟做了甚麼手腳..... 06/11 18:20