【问题标题】:Converting IL to C# code将 IL 转换为 C# 代码
【发布时间】:2020-11-27 05:04:46
【问题描述】:

我需要将 IL 转换为 c# 代码。 我有一个程序集,我正在阅读这个程序集。 我从 MethodInfo 得到 MethodBody 并且 methodbody 有一个方法 GetILAsByteArraY() 它返回一个字节数组,现在我想将此 IL 转换为 C# 代码。 请帮我解决这个问题。

【问题讨论】:

  • 你需要这个做什么?如果您更详细地描述您的情况,也许我们可以提供比 .NET Reflector 更多的建议。
  • @Anton 我们最好不要理解这个hackery。
  • 有人推荐过Reflector吗?
  • 显然,他想从代码中做到这一点。
  • ILSPy 的代码在 github github.com/icsharpcode/ILSpy,你可以从中取用你喜欢的东西

标签: c# .net


【解决方案1】:

不要重新发明轮子;使用 Lutz Roeder 的.NET Reflector

【讨论】:

  • 我认为很明显他正在尝试创建另一个类似 .NET Reflector 的轮子,他想知道它是如何制作的。 Lutz 不应该是世界上唯一知道如何做到这一点的人。
  • @HasanKhan 给出了 OP 的答案选择,他很高兴 Lutz 是唯一的人 :)
【解决方案2】:

购买了 Lutz Roeder 反射器,不再提供免费下载。

现在有一个名为ILSpy 的免费(再次)工具。我发现它非常好,它不仅会从 IL 生成 C# 代码,而且如果反编译整个 DLL 程序集,还会创建一个.csproj 项目。

【讨论】:

  • 从程序集中获取 C# 的代码?
【解决方案3】:

重新发明轮子无疑是一种更好的学习方式! 您必须创建自己的类,将 iL 转换为 C#。这需要中级语言知识。

我假设您已经将字节数组转换为 IL 指令,就像我们在 ildasm.exe 中看到的那样,使用 Reflection.Emit.OpCodes、OpCode.OperandType、BitConvertor.ReadByte()、BitConvertor.ReadInt32 等。

【讨论】:

【解决方案4】:

如果你想自己做,你可以从旧的 Cecil.Decompiler 开始并增强它,见 the source codean old post of Jb. Evain announcing the project(链接向下)。

【讨论】:

  • 修复了第一个,无法对第二个做任何事情,因为我不知道他为什么将他的博客离线,即使他仍然在 twitter 上引用它。
【解决方案5】:

让我们看看我能不能先拿到它:.NET Reflector!这真的应该是一个常见问题解答...

【讨论】:

    【解决方案6】:

    你不能用Reflector 做这个吗?

    您可以加载程序集并将其查看为 VB.net/C#/IL...

    【讨论】:

      【解决方案7】:

      对于搜索引擎的人来说,Reflector 不再免费。但是,telerik 提供了一种更新更好的工具,更不用说 FREE 了,名为 JustDecompile。我刚刚下载了这个,它太棒了,它只是测试版。显然 Telerik 承诺永远免费。

      【讨论】:

        【解决方案8】:

        如果你有程序集,你应该只使用.NET Reflector。也可以试试file gen addon.

        【讨论】:

          【解决方案9】:

          BCL 中没有工具可以做到这一点;但是,有一个很棒的工具叫做Reflector,您可以为它编写自己的插件。因此,您可能可以使用它来获取所需的数据。

          【讨论】:

            【解决方案10】:

            Reflector 这样做。也许您可以使用 Reflector 来对抗 Reflector 并了解它是如何处理问题的。

            您也可能会说出您为什么要这样做 - 可能会有更好的解决方案来解决您的整体问题。

            【讨论】:

            • 反射器内部使用不可打印文件进行了混淆(至少 lutz 这样做了)。虽然是的,但你可以反思自己,一个更好的问题是否真的值得......
            • 是的,这就是我的怀疑。这就是为什么我问他为什么要这样做。
            【解决方案11】:

            让我成为第一个建议您购买红门反射器副本的人。

            【讨论】:

            • @ck 好吧,你回答了一个问题,点击提交后,其他 50 人已经回答了。哦,好吧...
            【解决方案12】:

            如果你不想重新发明轮子,也许你应该试试 Dis#... 它几乎是转换代码的最佳工具 NetDASM 有一个工具可以让您将 C# 转换为 IL。也许你应该看看那个。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-11-17
              • 1970-01-01
              • 1970-01-01
              • 2012-04-25
              • 1970-01-01
              • 2010-09-17
              • 1970-01-01
              相关资源
              最近更新 更多