JustDecompile / dotPeek向我展示程序集的源代码。如何修改它?



我可以通过反编译器看到原始源代码,但是我如何修改源代码并在之后重新编译.DLL?

首先,你看不到原始源代码;你看到的是逆向工程的源代码。

如果您对以编程方式修改程序集感兴趣,请查看以下项目:* CodePlex 上的通用编译器基础结构 (CCI) 元数据和 CCI AST 项目。这正是他们的用途。

"[CCI] 允许应用程序有效地分析或修改 .NET 程序集、模块和调试 (PDB) 文件。" — 来自项目网站

IIRC,CCI元数据在相当低的抽象级别上工作。如果要使用它修改或插入代码,则必须处理中间语言(IL)。CCI AST 提供更高级别的抽象(抽象语法树)。

(顺便说一句。我想 CCI 不会允许您篡改强名称(签名)程序集,因为这会破坏它们的目的。

  • 它是为Mono开发的,但也适用于.NET:

    "用简单的英语来说,使用 Cecil,您可以加载现有的托管程序集,浏览所有包含的类型,即时修改它们并将修改后的程序集保存回磁盘。"

顺便说一句,在Stack Overflow上有一个问题,要求对两者进行比较。

其他相关库/框架:

  • 罗斯林。该项目的重点是将源代码表示为抽象语法/解析树,并允许您进行例如源代码分析和操作。它还应该能够为您编译源代码。但是,Roslyn 并不专门从事装配操作。(总而言之,你可以将Roslyn视为System.CodeDom和System.Linq.Expressions的混合体,但比其中任何一个都强大得多。

  • Kevin Montrose 编写了一个名为 Sigil 的 IL 发射库,它是"DynamicMethod 和 ILGenerator 的快速验证助手"。

  • 您可以使用ildasm(IL反汇编器)和ilasm(IL汇编器)来执行称为"往返"的操作(例如在Mike Stall的博客上阅读):

    往返是指反编译应用(可能通过 ILDasm),可能编辑 IL,然后重新编译(可能通过 ILAsm)。这是重写程序集 [...] 的主干。

  • 最后一个选项是 .NET 基类库 (BCL) 中的 System.Reflection 和 System.Reflection.Emit 功能。前者允许您检查装配体。后者提供了生成新程序集并将其保存到磁盘的功能。与 CCI 一样,您必须处理原始 IL。另外,我认为它们不允许您轻松修改现有程序集。

JustDecompile 的插件允许您编辑程序集。转到"程序集编辑器插件"部分。

最新更新