没有导出函数的DLL

DLL without exported functions?

本文关键字:DLL 函数      更新时间:2023-10-16

我窥探了一下MS-Office的dll,我注意到一些dll没有任何导出功能。我不太明白的是,应用程序如何使用这些dll而不导出任何功能?!

我的意思是,dllmain()确实在LoadLibrary()上执行,但有什么意义?为什么有人会创建一个没有导出函数的DLL ?

谢谢!: -)

处理面向不同语言的程序版本的一种方法是将所有资源放入语言DLL中。DLL不包含任何代码,只包含已翻译成目标语言的资源。当主程序启动时,它所需要做的就是加载适当的语言DLL。

我还没有看过有问题的dll;但是在像moffice这样的东西中,微软已经这样做了,以混淆DLL,使其更难以调试/逆向工程。

然而,当你问你如何使用这样一个DLL?如果应用程序知道 DLL的布局,那么它可以创建一个函数指针,其中包含已知函数的地址并调用它。

如果你真的想进一步挖掘,你可以objdump DLL并寻找标准的C/c++ ABI函数序&结语,并可能找出函数从哪里开始

当你调用LoadLibrary时,DLL会调用它的dlmain。这就是DLL入口点。它在进程附加和线程附加时被调用。所以你有切入点。

只要它至少有一个入口点,那么它就可以创建一些接口的实例(例如工厂),并将其设置在例如TLS变量中,其他模块将拾取它们。

因此,您可以拥有类似COM的接口系统,除了向应用程序外,这些系统不对外公开。像这样的东西——有很多可能的变化

资源信息

DLL可能包含其他Office程序使用的资源,如字符串表、图像、图标等。

总是有可能他们只是没有将它们导出为C接口。DLL不是魔法,它只是位和字节,没有人说如果你不向Windows请求,你就不能从DLL中获取代码。我相信。net采用了这种方法——他们将元数据保存在DLL中,告诉CLR其中的内容,而不是通过普通的GetProcAddress方法使。net函数可用。除非你明确要求。