【发布时间】:2010-09-12 12:40:27
【问题描述】:
我非常了解用于操作、生成、反编译 JVM 字节码的 Java 工具(ASM、cglib、jad 等)。 CLR 字节码有哪些类似的工具?人们是否为 CLR 进行字节码操作?
【问题讨论】:
我非常了解用于操作、生成、反编译 JVM 字节码的 Java 工具(ASM、cglib、jad 等)。 CLR 字节码有哪些类似的工具?人们是否为 CLR 进行字节码操作?
【问题讨论】:
Reflector 总是很好,但 Mono.Cecil 是您可能要求的最好的工具。它对于以任何方式操纵 CIL 都是非常宝贵的。
【讨论】:
Mono.Cecil 是像 ASM 一样的出色工具。它是 Mono 的一个子项目,并且完全开源。它甚至比 System.Reflection 提供了better feature。
【讨论】:
字节码是一种二进制格式。 .NET 程序集在存储执行指令的方式上大不相同。
.NET 语言不是编译成类似字节码的结构,而是编译成一种中间语言(实际上,它只是被称为--IL)。
这是一种人类可读的语言,看起来有点像面向对象的汇编程序版本。
因此,在检查或操作单个程序集的 IL 方面,Reflector 和 ILDASM 等工具可让您方便地查看任何程序集的 IL。
操作有点不同,我建议看看 .NET 空间中的一些 AOP 工具。我还建议看看 Phoenix,这是 MS 正在开发的一个编译器项目。它有一些非常酷的编译后操作功能。
如果您想了解更多关于 .NET AOP 工具的信息,我建议您打开另一个问题(那是完全不同的蠕虫)。
还有几本书会教你 IL 的来龙去脉。这不是一门很复杂的语言。
【讨论】:
NDepend 允许您进行 .NET 程序集静态分析(代码指标、依赖性分析等)。 NDepend 对于使用依赖矩阵、依赖图和树形图指标了解 .NET 程序集的结构非常有用visualizations。
它还与 Reflector 集成:例如,您可以分别使用 Type/Method Rank metric(类似于 Google Page Rank 的代码度量)检测程序集中的重要类型和方法,并直接从 NDepend 跳转到 Reflector在 C#、VB.NET 等中获取反汇编代码。
【讨论】: