[问题] 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