【问题标题】:In VC++, is there any way to know the export class of a dll without any header files?在 VC++ 中,有没有办法知道没有任何头文件的 dll 的导出类?
【发布时间】:2015-05-25 06:32:38
【问题描述】:

如果 C++ Dll 中有几个导出类,但我没有 Dll 共享头文件。所以我不知道这些导出类的定义,我唯一知道的就是类名。有没有办法找到这些导出类并使用它们?

现在我只能使用GetProcAddress API 来查找导出函数,有没有类似的API 来查找导出类?

我使用 VC++ 2008 编译器。

【问题讨论】:

    标签: c++ visual-c++ dll export


    【解决方案1】:

    你能得到的最接近的方法是通过逆向工程(使用调试器)在调用构造函数之前找到所需的内存大小,也许你可以弄清楚成员的用途(以及继承和其他好处),但是除了导出的函数之外,您肯定不会有任何正确的名称。它可能会奏效,但这是一项艰巨的任务。

    【讨论】:

    • Dll中有导出类的符号吗?我可以使用一些API通过符号获取导出类地址吗?
    • 可能不是,而且绝对不是标准的必需功能。可以将此类数据包含在 dll 资源中,但这将是一种非常尴尬的共享定义方法。不要指望有这样的东西可用。
    【解决方案2】:

    【讨论】:

    • 谢谢,但我想在我的程序中使用导出类,而不仅仅是查看它们。
    • 这有什么帮助?这些工具中的任何一个都会暴露一个类的结构吗?成员或所需的内存分配是否会被限制?
    • 好的,所以你想要的是对 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 来了解所有导出的函数。

    请让我知道我是否澄清了你的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多