元のソース コードは逆コンパイラで見ることができますが、ソース コードを変更して後で .DLL を再コンパイルするにはどうすればよいですか?
2 に答える
まず、元のソース コードが表示されません。リバース エンジニアリングされたソース コードが表示されます。
アセンブリをプログラムで変更することに関心がある場合は、次のプロジェクトを参照してください。 * CodePlexのCommon Compiler Infrastructure (CCI) メタデータおよびCCI ASTプロジェクト。それがまさに彼らの目的です。
「[CCI] により、アプリケーションは .NET アセンブリ、モジュール、およびデバッグ (PDB) ファイルを効率的に分析または変更できます。」— プロジェクトのウェブサイトから
IIRC、CCI メタデータは、かなり低いレベルの抽象化で機能します。コードを変更または挿入する場合は、中間言語 (IL) を処理する必要があります。CCI AST は、より高いレベルの抽象化 (抽象構文ツリー) を提供します。
(ちなみに、厳密に名前が付けられた (署名された) アセンブリを改ざんすることは、CCI では許可されていないと思います。これは、その目的を無効にするためです。)
モノ.セシル。Mono 用に開発されましたが、.NET でも動作します。
簡単に言えば、Cecil を使用すると、既存のマネージド アセンブリを読み込んで、含まれているすべての型を参照し、それらをその場で変更して、変更されたアセンブリをディスクに保存し直すことができます。— プロジェクトのウェブサイトから
ところで、Stack Overflow には、2 つの比較を求める質問があります。
その他の関連ライブラリ/フレームワーク:
ロズリン。このプロジェクトの焦点は、抽象的な構文/解析ツリーとしてのソース コードの表現にあり、ソース コードの分析や操作などを行うことができます。また、ソースコードをコンパイルできるようになっているはずです。ただし、Roslyn はアセンブリ操作に特化していません。(要約すると、Roslyn は System.CodeDom と System.Linq.Expressions の組み合わせと考えることができますが、これらのいずれよりもはるかに強力です。)
Kevin Montroseは、 「DynamicMethod と ILGenerator のフェイルファースト検証ヘルパー」であるSigilと呼ばれる IL発行ライブラリを作成しました。
ildasm
(IL 逆アセンブラー)と(IL アセンブラー) を使用ilasm
して、「ラウンドトリップ」と呼ばれる処理を実行できます (たとえば、Mike Stall のブログを参照してください)。ラウンドトリップとは、アプリケーションを逆コンパイルし (おそらく ILDasm を介して)、IL を編集してから (おそらく ILAsm を介して) 再コンパイルすることです。これは、アセンブリを書き換えるためのバックボーンです [...]。
最後のオプションは、.NET 基本クラス ライブラリ (BCL)のSystem.ReflectionおよびSystem.Reflection.Emit機能です。前者では、アセンブリを検査できます。後者は、新しいアセンブリを生成してディスクに保存する機能を提供します。CCI と同様に、生の IL を処理する必要があります。また、既存のアセンブリを簡単に変更できるとは思いません。
JustDecompileのプラグインを使用すると、アセンブリを編集できます。アセンブリ エディター プラグインセクションに移動します。