【发布时间】: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