在 VC++ 中,有没有办法知道没有任何头文件的 dll 的导出类?
Posted
技术标签:
【中文标题】在 VC++ 中,有没有办法知道没有任何头文件的 dll 的导出类?【英文标题】:In VC++, is there any way to know the export class of a dll without any header files? 【发布时间】:2015-05-25 06:32:38 【问题描述】:如果 C++ Dll 中有几个导出类,但我没有 Dll 共享头文件。所以我不知道这些导出类的定义,我唯一知道的就是类名。有没有办法找到这些导出类并使用它们?
现在我只能使用GetProcAddress API 来查找导出函数,有没有类似的API 来查找导出类?
我使用 VC++ 2008 编译器。
【问题讨论】:
【参考方案1】:你能得到的最接近的方法是通过逆向工程(使用调试器)在调用构造函数之前找到所需的内存大小,也许你可以弄清楚成员的用途(以及继承和其他好处),但是除了导出的函数之外,您肯定不会有任何正确的名称。它可能会奏效,但这是一项艰巨的任务。
【讨论】:
Dll中有导出类的符号吗?我可以使用一些API通过符号获取导出类地址吗? 可能不是,而且绝对不是标准的必需功能。可以将此类数据包含在 dll 资源中,但这将是一种非常尴尬的共享定义方法。不要指望有这样的东西可用。【参考方案2】:您可以使用各种工具 1.http://www.dependencywalker.com 2.http://www.nirsoft.net/utils/dll_export_viewer.html 3.http://www.heaventools.com/PE_Explorer_syntax_lookup.htm
【讨论】:
谢谢,但我想在我的程序中使用导出类,而不仅仅是查看它们。 这有什么帮助?这些工具中的任何一个都会暴露一个类的结构吗?成员或所需的内存分配是否会被限制? 好的,所以你想要的是对 DLL 进行逆向工程,我过去做过,这完全取决于 DLL 的创建方式,所以没有单一的灵丹妙药,你可以看看在reverseengineering.stackexchange.com/questions/2134/…【参考方案3】:有两种方法可以从 DLL 中导出函数。 1) 显式链接到 DLL 2) 隐式链接到 DLL
1) 如果您想使用通过第一种方法创建的 DLL 你需要
.h 文件 .DLL 文件 .bin 文件2) 如果您想使用通过第二种方法创建的 DLL 你需要
仅.DLL 文件在第二种情况下,您需要 - 自己加载DLL - 自己计算函数地址 -> GetProcAddress() - 自己卸载 DLL
如果您有 DLL,但不知道它正在导出哪些类或函数 - 使用带有 /Exports 选项的 Dumpbin 来了解所有导出的函数。
请让我知道我是否澄清了你的问题
【讨论】:
以上是关于在 VC++ 中,有没有办法知道没有任何头文件的 dll 的导出类?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有包含保护且没有多个定义错误的情况下编写头文件?