MSIL 逆アセンブラ (Ildasm.exe)
MSIL 逆アセンブラは MSIL アセンブラ (Ilasm.exe) と対をなすツールです。Ildasm.exe は、Microsoft Intermediate Language (MSIL) コードを含む、ポータブル実行可能 (PE) ファイルを使用して、Ilasm.exe に対する入力として適したテキスト ファイルを作成します。
ildasm [options] [PEfilename] [options]
パラメータ
.exe、.dll、.obj、.lib の各ファイルについて、次のオプションを使用できます。
オプション | 説明 |
---|---|
/output= filename |
結果をグラフィカル ユーザー インターフェイスに表示せずに、指定した filename を持つ出力ファイルを作成します。 |
/rtf |
出力をリッチ テキスト形式で生成します。/text オプションと共に使用すると無効になります。 .NET Framework Version 2.0 で新たに追加されました。 |
/text |
結果をグラフィカル ユーザー インターフェイスまたは出力ファイルに出力せずに、コンソール ウィンドウに表示します。 |
/html |
出力を HTML 形式で生成します。/output オプションと共に使用する場合に有効です。 .NET Framework Version 2.0 で新たに追加されました。 |
/? |
このツールのコマンド構文とオプションを表示します。 |
.exe ファイルと .dll ファイルについては、次のオプションも利用できます。
オプション | 説明 |
---|---|
/bytes |
実際のバイトを 16 進形式の命令コメントとして表示します。 |
/caverbal |
カスタム属性の BLOB を Verbal 形式で生成します。既定はバイナリ形式です。 .NET Framework Version 2.0 で新たに追加されました。 |
/linenum |
元のソース行への参照を組み込みます。 |
/nobar |
逆アセンブルのプログレス インジケータ ポップアップ ウィンドウの表示を中止します。 |
/noca |
カスタム属性の出力を抑止します。 .NET Framework Version 2.0 で新たに追加されました。 |
/pubonly |
パブリックな型とメンバだけを逆アセンブルします。/visibility:PUB と等価です。 |
/quoteallnames |
すべての名前を単一引用符で囲みます。 |
/raweh |
例外処理句を生の形式で表示します。 |
/source |
元のソース行をコメントとして表示します。 |
/tokens |
クラスとメンバのメタデータ トークンを表示します。 |
/visibility: vis [+vis ...] |
指定した参照可能範囲を持つ型またはメンバだけを逆アセンブルします。vis の有効な値を次に示します。 PUB — Public PRI — Private FAM — Family ASM — Assembly FAA — Family and Assembly FOA — Family or Assembly PSC — Private Scope 以上の可視性修飾子の定義については、「MethodAttributes」と「TypeAttributes」を参照してください。 |
次のオプションは、.exe ファイルおよび .dll ファイルをファイル出力またはコンソール出力する場合にだけ有効です。
オプション | 説明 | ||
---|---|---|---|
/all |
/header、/bytes、/stats、/classlist、および /tokens の各オプションの組み合わせを指定します。
|
||
/classlist |
モジュールで定義されているクラスの一覧を含めます。 .NET Framework Version 2.0 で新たに追加されました。 |
||
/forward |
事前のクラス宣言を使用します。 .NET Framework Version 2.0 で新たに追加されました。 |
||
/header |
出力にファイル ヘッダー情報を組み込みます。 |
||
/item: class[::member[(sig]] |
指定した引数に応じて、次の要素を逆アセンブルします。
|
||
/noil |
MSIL アセンブリ コードの出力を中止します。 |
||
/stats |
イメージの統計情報を含めます。 .NET Framework Version 2.0 で新たに追加されました。 |
||
/typelist |
ラウンド トリップの型の順序を保存するために、型の完全な一覧を生成します。 .NET Framework Version 2.0 で新たに追加されました。 |
||
/unicode |
出力に Unicode エンコードを使用します。 |
||
/utf8 |
出力に UTF-8 エンコードを使用します。既定値は ANSI です。 |
次のオプションは、.exe、.dll、.obj、.lib の各ファイルをファイル出力またはコンソール出力する場合にだけ有効です。
オプション | 説明 |
---|---|
/metadata[=specifier] |
メタデータを表示します。ここで、specifier は次のとおりです。 MDHEADER — メタデータのヘッダー情報とサイズを表示します。 HEX — ワードおよび 16 進で情報を表示します。 CSV — レコード カウントとヒープ サイズを表示します。 UNREX — 未解決の外部項目を表示します。 SCHEMA — メタデータのヘッダー情報とスキーマ情報を表示します。 RAW — 未処理のメタデータ テーブルを表示します。 HEAPS — 未処理のヒープを表示します。 VALIDATE — メタデータの一貫性を検証します。 /metadata に複数の項目を指定し、specifier に異なる値を指定できます。 .NET Framework Version 2.0 で新たに追加されました。 |
次のオプションは、.lib ファイルをファイル出力またはコンソール出力する場合にだけ有効です。
オプション | 説明 |
---|---|
/objectfile=filename |
指定したライブラリ内の単一のオブジェクト ファイルのメタデータを表示します。 .NET Framework Version 2.0 で新たに追加されました。 |
メモ : |
---|
Ildasm.exe に関するすべてのオプションでは大文字と小文字が区別されず、先頭の 3 文字で認識されます。たとえば、/quo は /quoteallnames と等価です。引数を伴うオプションの場合は、オプションと引数の間に区切り記号としてコロン (:) または等号 (=) を挿入できます。たとえば、/output:filename は /output=filename と等価です。 |
解説
Ildasm.exe はディスク上のファイルについてだけ動作します。グローバル アセンブリ キャッシュ内にインストールされたファイルについては動作しません。
Ildasm.exe で生成されるテキスト ファイルを MSIL アセンブラ (Ilasm.exe) に対する入力として使用できます。これは、必ずしもランタイム メタデータ属性のすべてをサポートしないプログラミング言語で記述されたコードをコンパイルするときなどに便利です。コードをコンパイルし、その出力を Ildasm.exe で実行した後、生成された MSIL テキスト ファイルを手作業で編集して足りない属性を追加できます。このテキスト ファイルを MSIL アセンブラで実行すると、最終的な実行可能ファイルを生成できます。
メモ : |
---|
現時点では、埋め込みのネイティブ コード (たとえば Visual C++ で生成された PE ファイル) を含む PE ファイルについては、この手法を使用できません。 |
MSIL 逆アセンブラで既定の GUI を使用すると、既存のどの PE ファイルのメタデータおよび逆アセンブルしたコードでも、階層ツリー ビューで表示できます。GUI を使用するには、引数 PEfilename またはその他のオプションを指定せずに、コマンド行で「ildasm」と入力します。[ファイル] メニューで、Ildasm.exe に読み込む PE ファイルまで移動できます。選択した PE ファイルについて表示された、メタデータおよび逆アセンブルしたコードを保存するには、[ファイル] メニューの [ダンプ] をクリックします****。階層ツリー ビューだけを保存するには、[ファイル] メニューの [ツリービューをダンプ] をクリックします。****Ildasm.exe へのファイルの読み込み方法、および出力の解釈の詳細については、.NET Framework SDK に用意されている Samples フォルダ内の Ildasm.exe のチュートリアルを参照してください。
Ildasm.exe に対して、埋め込みリソースを含む引数 PEfilename を指定した場合は、複数の出力ファイルが生成されます。生成されるファイルは、MSIL コードを含む 1 つのテキスト ファイルと、埋め込みマネージ リソースごとにリソース名を使用してメタデータから生成した .resources ファイルです。アンマネージ リソースが PEfilename の中に埋め込まれている場合は、MSIL 出力に対して /output オプションで指定されたファイル名を使用して、.res ファイルが生成されます。**
メモ : |
---|
Ildasm.exe では、入力ファイルの .obj と .lib についてはメタデータの説明だけが表示されます。これらの種類のファイルの場合、MSIL コードは逆アセンブルされません。 |
Ildasm.exe を .exe ファイルまたは .dll ファイルに対して実行し、ファイルが管理されているかどうかを確認できます。ファイルが管理されていない場合は、そのファイルに有効な共通言語ランタイム ヘッダーがないため、逆アセンブルできないことを示すメッセージが表示されます。ファイルが管理されている場合は、処理が正常に行われます。
例
PE ファイル MyHello.exe のメタデータと逆アセンブルしたコードを、Ildasm.exe の既定の GUI で表示するコマンドを次に示します。
ildasm myHello.exe
ファイル MyFile.exe を逆アセンブルし、その結果の MSIL アセンブラ テキストをファイル MyFile.il に格納するコマンドを次に示します。 ``
ildasm MyFile.exe /output:MyFile.il
ファイル MyFile.exe を逆アセンブルし、その結果の MSIL アセンブラ テキストをコンソール ウィンドウに表示するコマンドを次に示します。
ildasm MyFile.exe /text
MyApp.exe
に埋め込みのマネージ リソースとアンマネージ リソースが含まれる場合に次のコマンドを実行すると、4 つのファイル、MyApp.il
、MyApp.res
、Icons.resources,
、および Message.resources
が生成されます。
ildasm MyApp.exe /output:MyApp.il
MyFile.exe
内のクラス MyClass
に属するメソッド MyMethod
を逆アセンブルし、その出力をコンソール ウィンドウに表示するコマンドを次に示します。
ildasm /item:MyClass::MyMethod MyFile.exe /text
上の例では、異なるシグネチャを持つ MyMethod
という名前のメソッドが複数存在する可能性があります。戻り値の型 void、およびパラメータの型 int32 と string を指定してインスタンス メソッド MyMethod
を逆アセンブルするコマンドを次に示します。
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
メモ : |
---|
.NET Framework Version 1.0 および 1.1 では、メソッド名の後にある左かっことシグネチャの後にある右かっこの数が一致するように |
static メソッド (Visual Basic の Shared メソッド) を取得するには、キーワード instance を省略します。int32 や string のようなプリミティブ型でないクラス型には名前空間を含め、キーワード class を前に付ける必要があります。外部の型には、角かっこで囲んだライブラリ名を前に付ける必要があります。AppDomain 型の 1 つのパラメータと AppDomain 型の戻り値を持つ、MyMethod
という名前の静的メソッドを逆アセンブルするコマンドを次に示します。
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
入れ子になった型は、クラスを前に付けてスラッシュで区切る必要があります。たとえば、MyNamespace.MyClass
クラスに NestedClass
という名前の入れ子になったクラスが含まれている場合は、class MyNamespace.MyClass/NestedClass
のように指定します。
参照
関連項目
.NET Framework ツール
MSIL アセンブラ (Ilasm.exe)
SDK のコマンド プロンプト