私は、JVM バイトコード (ASM、cglib、jad など) を操作、生成、逆コンパイルするための Java ツールについてよく知っています。CLR バイトコード用の同様のツールはありますか? 人々は CLR のバイトコード操作を行いますか?
5 に答える
Reflector は常に優れていますが、Mono.Cecil は全体的に求めることができる最高のツールです。何らかの方法で CIL を操作するのに非常に役立ちます。
Mono.Cecilは ASM のような優れたツールです。Mono のサブプロジェクトであり、完全にオープン ソースです。System.Reflectionよりも優れた機能を提供します。
バイトコードはバイナリ形式です。.NET アセンブリは、実行命令を格納する方法がかなり異なります。
バイトコードのような構造にコンパイルする代わりに、.NET 言語は中間言語にコンパイルされます (実際、それは単に IL と呼ばれます)。
これは人間が読める言語で、オブジェクト指向バージョンのアセンブラーのように見えます。
そのため、個々のアセンブリの IL を調べたり操作したりするという点では、Reflector や ILDASM などのツールを使用すると、任意のアセンブリの IL を簡単に表示できます。
操作は少し異なります。.NET スペースの AOP ツールのいくつかを調べてみることをお勧めします。また、MS が進行中のコンパイラ プロジェクトである Phoenix も検討することをお勧めします。これには、非常に優れたコンパイル後の操作機能がいくつかあります。
.NET AOP ツールについて詳しく知りたい場合は、別の質問を開くことをお勧めします (これはまったく別のワームです)。
また、IL の詳細を説明する本もいくつかあります。学ぶのはそれほど複雑な言語ではありません。
NDependを使用すると、.NET アセンブリの静的分析 (コード メトリック、依存関係分析など) を実行できます。NDepend は、依存関係マトリックス、依存関係グラフ、およびツリーマップ メトリックの視覚化を使用して、.NET アセンブリの構造の概要を取得するのに非常に役立ちます。
また、Reflector とも統合されています。たとえば、タイプ/メソッドランク メトリック(Google ページ ランクに似たコード メトリック) をそれぞれ使用して、アセンブリ内の重要なタイプとメソッドを検出し、NDepend から Reflector に直接ジャンプして逆アセンブルを取得できます。 C#、VB.NET などのコード。