【问题标题】:C++ DLL recreate based on dumpbin基于 dumpbin 的 C++ DLL 重新创建
【发布时间】:2016-11-03 10:51:25
【问题描述】:

我正在尝试根据现有 DLL 的结果重新创建 dll 的导出函数。原因是这个 DLL 被读入一个非常旧的软件,并且缺乏关于如何创建 DLL 的文档。

这是 DUMPBIN /exports 的结果

文档声明函数头应该是:

DLLEXPORT long WINAPI User_Write(char *Command, char *Parameter)

但我找不到任何方法来使用该确切行并复制输出,因此我创建了一个具有以下函数头的 DLL:

extern "C" __declspec(dllexport) long __cdecl User_Write(char *Command, char *Parameter)

当我使用 DUMPBIN /exports 导出此 DLL 时,我得到以下信息:

类似但不一样,软件不接受DLL。我真的需要一些帮助!

【问题讨论】:

  • “不接受 DLL”不是正确的问题描述。最明显的错误是调用约定之间的不匹配(您编写了 cdecl 但声明需要 stdcall)。并且根本没有装饰导出的函数。您从未提到使用 DEF 文件(需要移除装饰),因此您可能构建了一个 x64 DLL,而该程序需要一个 x86 DLL。
  • 该软件实现了加载用户构建的DLL的功能,它应该像上面那样导出3个简单的功能。原始 DLL 不与任何 DEF 文件配对,它只有一个 DLL 文件,我构建的 DLL 也是如此。我构建的 DLL 是用 Microsoft Visual C++ V6.0 制作的,因为我得到的输入可能是它可能用于创建原始 DLL。

标签: c++ dll dumpbin


【解决方案1】:

尝试更改调用约定 extern "C" __declspec(dllexport) long __stdcall User_Write(char *Command, char *Parameter)

【讨论】:

  • 感谢您的回复!这给了我以下结果,而不是真正的目标:1 0 00001063 _User_GetErrorMsg@8 2 1 0000104F _User_Read@8 3 2 0000103B _User_Write@8
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多