【问题标题】:What is the minimum needed to make my dll match the signature of another?使我的 dll 与另一个签名匹配的最低要求是多少?
【发布时间】:2017-03-21 17:48:53
【问题描述】:

我正在尝试代理一个我没有所有源代码的现有 dll。我正在使用我在这里找到的工具:

https://github.com/mavenlin/Dll_Wrapper_Gen

使用它,我能够创建一个 Visual Studio 项目并成功构建它。但是,在运行原始可执行文件时,它会引发“badimageFormatException”异常。在另一个问题的 SO 上得到一些无用的 cmets-but-not-answers 后,我发现了我认为代理 dll 和原始 dll 之间的本质区别。

使用 corflags.exe 工具(来自 VS,看起来 dumpbin 也具有正确的功能,但我无法弄清楚),我得到以下原始输出:

C:\Users\jo\fml2>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\Co
rFlags.exe" fml.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.30729.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v1.1.4322
CLR Header: 2.0
PE        : PE32
CorFlags  : 0
ILONLY    : 0
32BIT     : 0
Signed    : 0

如果我在代理 dll 上使用相同的工具,我会得到:

corflags : error CF008 : The specified file does not have a valid managed header

我需要在我的代码中添加什么以使其匹配?

【问题讨论】:

  • 它是一个混合模式的 .NET 程序集,用托管 C++ 编写。它以 .NET 1.1 为目标,您需要 VS2003 来构建这样的程序集。您没有注意的部分是托管接口。像 Reflector 这样不错的反汇编器可以反编译它。
  • 完全如前所述。您的 DLL 是非托管的,但目标需要加载托管 DLL。
  • @HansPassant 有没有办法让 VS2005 或 2008 来构建这个?两个我都有,2003还不如迷失在某个古墓里。
  • 嗯,您必须淡化言辞,David 总是在 SO 上很有帮助。我们并不经常有幸获得体面的信息来产生有用的评论或答案,这就像拔牙让 OP 自愿提供任何东西。你只是没有帮助我们帮助你。就像您根本没有提及使用此 DLL 的主机程序一样。它很可能需要一个 .NET 1.1 程序集,因为它也是针对 1.1 构建的。用反编译器看看。
  • 有他的cmets对我的问题的记录。我不觉得他“有福”,他当然没有帮助。他重复了我自己在问题中已经提出的内容,并没有添加任何内容,但暗示了很多。至于主机程序,它是一个零售消费产品,不会增加任何话题……它不能被反编译,至少不能用我买得起的任何工具。

标签: winapi visual-c++ dll unmanaged


【解决方案1】:

这只是部分答案,不受欢迎。

代理 dll 项目将其构建为 C++ dll,它实际上与其他 dll 不在同一环境/框架/平台内。这会导致一些并发症。

但是,在没有其他更改的情况下,您可以在 Visual Studio 中右键单击项目,所需的配置位于打开的对话框的第一个面板上。该面板将分为“General”和“Project Defaults”,第六行是“Common Language Runtime support”。这将有几个选项,但如果它不提供来自 corflags.exe 的元数据,这意味着选择了“不支持”选项。这当然需要改变。

让它包含正确的 CLR 运行时库/支持比较棘手,我还没有弄清楚。

我正在回答我自己的问题,因为尽管得到了常客的祝福,但他们除了质问之外什么都没做。我希望得到真正知道自己在做什么的人的权威回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2016-11-14
    • 2022-01-18
    • 2021-10-15
    相关资源
    最近更新 更多