没有导出函数的DLL
DLL without exported functions?
我窥探了一下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函数可用。除非你明确要求。
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 代码在 msvcrt .dll函数上设置断点失败
- VB.NET DLL中的C++DLL函数复制
- 在python-ctypes中声明变量并传递给dll函数
- 从 Python 调用 Windows DLL 函数时出错
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 列出 C# 中的 non-.NET DLL 函数
- 基本 DLL 函数
- 如何在不可修改的源代码中使用 DLL 函数?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 测试C++ DLL 函数
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- 使用指针调用C++ DLL 函数
- 在C++中导入 DLL 函数
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 如何从 UWP 应用调用"libheif.dll"函数