Ildasm.exe (MSIL 逆アセンブラー)

更新 : 2011 年 4 月

MSIL 逆アセンブラーは MSIL アセンブラー (Ilasm.exe) と対をなすツールです。 Ildasm.exe は、Microsoft Intermediate Language (MSIL) コードを含む、ポータブル実行可能 (PE) ファイルを使用して、Ilasm.exe に対する入力として適したテキスト ファイルを作成します。

このツールは Visual Studio および Windows SDK と一緒に自動的にインストールされます。 このツールを実行するには、Visual Studio コマンド プロンプトまたは Windows SDK コマンド プロンプト (CMD シェル) を使用することをお勧めします。 これらのユーティリティを使用すると、インストール フォルダーに移動することなくツールを簡単に実行できます。 詳細については、「Visual Studio と Windows SDK のコマンド プロンプト」を参照してください。

  • コンピューターに Visual Studio がインストールされている場合は、タスク バーの [Start] ボタンをクリックし、[All Programs]、[Visual Studio]、[Visual Studio Tools]、[Visual Studio Command Prompt] の順にクリックします。

    または

    コンピューターに Windows SDK がインストールされている場合は、タスク バーの [Start] ボタンをクリックし、[All Programs]、Windows SDK のフォルダー、[Command Prompt] (または [CMD Shell]) の順にクリックします。

  • コマンド プロンプトに次のように入力します。

ildasm [options] [PEfilename] [options]

パラメーター

.exe、.dll、.obj、.lib の各ファイルについて、次のオプションを使用できます。

オプション

説明

/out=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 の各オプションの組み合わせを指定します。

メモメモ
.NET Framework Versions 1.0 と 1.1 では、/header/bytes/tokens の各オプションの組み合わせを指定します。

/classlist

モジュールで定義されているクラスの一覧を含めます。

.NET Framework Version 2.0 で新たに追加されました。

/forward

事前のクラス宣言を使用します。

.NET Framework Version 2.0 で新たに追加されました。

/headers

出力にファイル ヘッダー情報を組み込みます。

/item:class[::member[(sig]]

指定した引数に応じて、次の要素を逆アセンブルします。

  • 指定した class を逆アセンブルします。

  • 指定した class の member を逆アセンブルします。

  • 指定したシグネチャ sig を持つ class の member を逆アセンブルします。 sig の書式は次のとおりです。

    [instance] returnType(parameterType1, parameterType2, …, parameterTypeN)

    メモ   .NET Framework Version 1.0 および 1.1 では、(sig) のように、sig の後に閉じかっこを付ける必要があります。 Version 2.0 では、閉じかっこを省略して (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 へのファイルの読み込みおよび出力の解釈の詳細については、Windows Software Development Kit (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、およびパラメーターの型 int32string を指定してインスタンス メソッド MyMethod を逆アセンブルするコマンドを次に示します。

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
メモメモ

.NET Framework Version 1.0 および 1.1 では、メソッド名の後にある左かっことシグネチャの後にある右かっこの数が一致するように MyMethod(instance void(int32)) とする必要があります。.NET Framework Version 2.0 では、閉じかっこを省略して MyMethod(instance void(int32) とする必要があります。

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 のように指定します。

参照

参照

Ilasm.exe (MSIL アセンブラー)

Visual Studio と Windows SDK のコマンド プロンプト

概念

マネージ実行プロセス

その他の技術情報

.NET Framework ツール

履歴の変更

日付

履歴

理由

2011 年 4 月

Visual Studio と Windows SDK のコマンド プロンプトの使用に関する情報を追加。

情報の拡充