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