【问题标题】:DLL DecompilationDLL 反编译
【发布时间】:2011-01-20 06:01:58
【问题描述】:

我正在尝试使用名为 Reflector 的工具反编译一个 dll,但它只显示定义,而不是完整的代码。是什么原因?怎样才能完全反编译?

问候

【问题讨论】:

  • 提供截图。不明白你的意思。
  • 好吧,对不起。这就是我了解外部含义的关键。这些方法在其他地方实现。现在我试图理解其余的。反编译代码的示例是: [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), TypeLibFunc((short) 0x40), DispId(0x2f)] public virtual extern void _DoCommand([In, MarshalAs(UnmanagedType.BStr) ] string Verb, [In, MarshalAs(UnmanagedType.BStr)] string PlugInKey = "");
  • @Saha:这意味着它是一个混合模式程序集,在您询问的函数中没有 .NET 代码 (MSIL),只有包装在 .NET 元数据中的本机机器代码。反射器对此无济于事。

标签: .net dll decompiling reflector


【解决方案1】:

它是混合模式的 DLL 吗?您是否扩展了一个方法以查看其反编译的源代码?

您可能会发现 FileDisassembler 插件很有帮助(不确定这是否是最新版本)。

【讨论】:

    【解决方案2】:

    右键单击程序集、命名空间、类或成员,然后从上下文菜单中选择“反汇编”。或作为快捷方式,按空格键

    【讨论】:

    • @sahs 定义“没有帮助”?发生什么了?你看到了什么?
    【解决方案3】:

    打开反射器

    右键单击要提取的dll

    点击导出

    给 c:\YourDirectoryName。

    您将在 c:\YourDirectoryName 中获得提取的代码

    【讨论】:

      【解决方案4】:

      要查看反射器中的代码,您必须导航到方法。如果您正在查看一个类型,那么是的 - 它只会显示定义,即使在反汇编时也是如此(尽管有时会有一个“扩展方法”按钮很有帮助)。

      如果它仍然不起作用,即使在查看方法时,也很可能是 dll 被混淆或不是从代码编译的(直接 IL 可以做一些难以映射回大多数语言的事情)。

      【讨论】:

      • 您仍然可以将其视为 MSIL。而他所拥有的是一个包含本机代码和 .NET 元数据但不包含 MSIL 的混合模式程序集。没有什么可以反编译的。 C++/CLI 是创建此类程序集的最常用方法。
      【解决方案5】:

      在 Reflector 中,向下钻取左侧的树视图以找到要查看其代码的类型。找到它后,单击它以选择它并按 空格键。然后,您将在右侧看到方法声明。向下滚动到该视图的最底部,然后单击绿色的“扩展方法”超链接。

      或者,在树形视图中展开该类型,选择单个方法,然后按 空格键

      【讨论】:

      • OT:那么你如何制作那些漂亮的钥匙?
      • @leppie: <kbd>Key name here</kbd>
      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2023-01-17
      • 2011-07-09
      相关资源
      最近更新 更多