存在哪些CLR / .NET字节码工具?

时间:2020-03-06 14:37:33  来源:igfitidea点击:

我非常了解用于处理,生成,反编译JVM字节码(ASM,cglib,jad等)的Java工具。对于CLR字节码,存在哪些类似的工具?人们会为CLR进行字节码操纵吗?

解决方案

ILDASM和Reflector浮现在脑海。

Reflector总是很好,但是Mono.Cecil是我们可能需要的总体最佳工具。对于以任何方式操作CIL来说都是无价的。

字节码是二进制格式。 .NET程序集在存储执行指令方面的工作方式大不相同。

.NET语言不是编译成类似字节码的结构,而是被编译成一种中间语言(实际上,它被称为IL)。

这是一种人类可读的语言,看起来有点像面向对象的汇编器版本。

因此,就检查或者操纵单个装配的IL而言,如Reflector和ILDASM之类的工具可让我们方便地查看任何装配的IL。

操作有些不同,我建议我们看一下.NET空间中的一些AOP工具。我还建议我们看一看Phoenix,这是MS正在进行的一个编译器项目。它具有一些非常酷的编译后操纵功能。

如果我们想了解有关.NET AOP工具的更多信息,建议我们提出另一个问题(这完全是其他蠕虫病毒)。

也有几本书将教我们IL的来龙去脉。这不是一门非常复杂的语言。

Mono.Cecil是ASM之类的出色工具。它是Mono的子项目,并且是完全开源的。它甚至提供了比System.Reflection更好的功能。

NDepend允许我们对.NET程序集进行静态分析(代码指标,依赖性分析等)。 NDepend对于使用依赖关系矩阵,依赖关系图和树图度量可视化来概述.NET程序集的结构非常有用。

它还与Reflector集成:例如,我们可以分别使用类型/方法等级度量(类似于Google Page Rank的代码度量)来检测程序集中的重要类型和方法,然后直接从NDepend跳转到Reflector进行反汇编C#,VB.NET等代码