【问题标题】:"is not a .NET module." what does it mean?“不是 .NET 模块。”这是什么意思?
【发布时间】:2011-06-27 19:34:41
【问题描述】:

我正在使用 beta 7.2 反射器,当我试图反射一些 exe 文件时,我看到了这条消息。什么意思?

谢谢

【问题讨论】:

    标签: reflector


    【解决方案1】:

    这意味着EXE不是.NET assembly.它是标准的Windows可执行文件或COM可执行文件。

    例如,用 VB6 编写的程序不是 .NET 程序集;它们不包含您期望 .NET 程序集包含的 metadata

    【讨论】:

    • 当我在语言中查看文件详细信息(属性 -> 详细信息)时,它被写成“语言中立”是什么意思?
    • Reflector 反汇编为您指定的语言。由于它不是 .NET 程序集,因此反射器根本无法对其进行反汇编,因此任何将语言归于程序集的尝试都是没有意义的。
    • 我试图通过 spy++ 来窥探它,它被识别为 WindowsForms10.Window.8.app.0.33c0d9d 是 .Net 吗?
    • 根据微软的说法,该信息是“未记录的”,不能依赖。见social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/…
    【解决方案2】:

    如果它确实是一个 .NET 程序集(正如您后来的一些 cmets,基于来自 Spy++ 的信息所建议的那样),那么它可能被混淆了。一些混淆器可以修改程序集元数据流,使它们对 ildasm 和 Reflector 都无效,而 CLR 仍然可以加载它们,因为它没有做太多的验证。

    【讨论】:

      【解决方案3】:

      .Net Reflector 只能反编译 .NET 程序集。我的猜测是可执行文件不是 .NET 可执行文件,因此 Reflector 无法加载它。

      【讨论】:

        【解决方案4】:

        我认为它正在寻找一个 CLI 标头,表明 .exe 实际上是一个 .NET 程序集,而且它看起来不像您有资格的那个。

        【讨论】:

          【解决方案5】:

          您正在尝试反映 COM 或本机可执行/动态链接库,而不是 .NET 程序集。反射器无法做到这一点。还有其他用于检查 COM 资源的工具,尽管它们不会像 Reflector 在 .NET 程序集上那样完全反汇编。

          【讨论】:

          • 我试图通过 spy ++ 来窥探它,它已被识别为“WindowsForms10.Window.8.app.0.33c0d9d”,而且我已经“玩”了一点应用程序和崩溃了(这个过程附加到调试器)然后我得到标准的.net异常但看不到源代码。有什么方法可以反映这个 exe,或者,这是浪费时间?
          • 你从哪里得到这个的?查看您添加的信息,我想知道这是否只是一个严重混淆的程序集。
          • 混淆会导致各种问题。在最低级别(例如,带有 VS 的 Dotfuscator),它是简单的符号重命名。在更高级别,它可以完全停止反编译。我什至在某些混淆程序集上看到过旧版本的反射器崩溃。
          • 混淆不会使您的代码更难阅读吗?晦涩 - 不清楚
          • @Cromix 混淆确实使代码更难阅读,但这就是它的目的。您正试图使代码更难阅读,因此无法轻松反编译。记住 .NET 代码本质上是伪代码,直到它被系统 JIT 编译(至少在“正常”实现中)
          猜你喜欢
          • 2013-08-17
          • 2011-09-04
          • 2018-10-29
          相关资源
          最近更新 更多