[問題] dll export 的相關疑問

作者: QQ29 (我愛阿蓉)   2014-06-10 18:06:32
大家好
我是使用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也好...
感激
作者: Killercat (殺人貓™)   2014-06-10 18:44:00
別管靜態符號連結了 你看看這個LoadLibraryEx如何(欸dlldump可以讓你找到一些訊息 不過C++來講symbol的解譯不是非常的...文件化 可能不太好看懂說錯 不是dlldump 是dumpbin 太久沒用了囧
作者: purpose (秀才遇到肥宅兵)   2014-06-10 19:58:00
2.def file private 3.反組譯看程式碼運行來推測
作者: QQ29 (我愛阿蓉)   2014-06-11 18:13:00
LoadLibrary(L"Kernel32.dll");LoadLibrary(L"API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL")LoadLibrary(L"API-MS-WIN-CORE-HEAP-L1-2-0.DLL");發現 這三個dll load出來位址一樣...完全無法理解我用dependencywalker看,一堆不瞭解的地方,真的是太深奧了網路上也找不到這tool顯示資訊的介紹只能猜LoadLibrary(L"Kernel32.dll");位址減GetProcAddress(handle0, "Loadlibrary"); 也不是我理解的載入位址的offset..同樣觀念套在自己做的dll就OK...不知微軟做了甚麼手腳.....

Links booklink

Contact Us: admin [ a t ] ucptt.com