次の方法で共有


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

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

このツールは、Visual Studio と共に自動的にインストールされます。 ツールを実行するには、、Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を使用します。

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

構文

ildasm [options] [PEfilename] [options]

パラメーター

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

オプション 説明
/out= filename 結果をグラフィカル ユーザー インターフェイスに表示せずに、指定した filename を持つ出力ファイルを作成します。
/rtf 出力をリッチ テキスト形式で生成します。 /text オプションと共に使用すると無効になります。
/text 結果をグラフィカル ユーザー インターフェイスまたは出力ファイルに出力せずに、コンソール ウィンドウに表示します。
/html 出力を HTML 形式で生成します。 /output オプションと共に使用する場合にのみ有効です。
$ このツールのコマンド構文とオプションを表示します。

.exe ファイル、 .dll ファイル、および .winmd ファイルについては、次のオプションも利用できます。

オプション 説明
/bytes 実際のバイトを 16 進形式の命令コメントとして表示します。
/caverbal カスタム属性の BLOB を Verbal 形式で生成します。 既定はバイナリ形式です。
/linenum 元のソース行への参照を組み込みます。
/nobar 逆アセンブルのプログレス インジケーター ポップアップ ウィンドウの表示を中止します。
/noca カスタム属性の出力を抑止します。
/project ネイティブ Windows ランタイムに表示される方法ではなく、マネージド コードに表示される方法でメタデータを示します。 PEfilename が Windows メタデータ ( .winmd) ファイルではない場合、このオプションは無効になります。 「Windows ストア アプリおよび Windows ランタイムのための .NET Framework サポート」を参照してください。
/pubonly パブリックな型とメンバーだけを逆アセンブルします。 /visibility:PUBと等価です。
/quoteallnames すべての名前を単一引用符で囲みます。
/raweh 例外処理句を生の形式で表示します。
/source 元のソース行をコメントとして表示します。
/tokens クラスとメンバーのメタデータ トークンを表示します。
/visibility: vis[+vis...] 指定した参照可能範囲を持つ型またはメンバーだけを逆アセンブルします。 vis の有効な値を次に示します。

PUB — Public

PRI — Private

FAM — Family

ASM — Assembly

FAA — Family および Assembly

FOA — Family または Assembly

PSC — Private Scope

以上の可視性修飾子の定義については、「MethodAttributes」と「TypeAttributes」を参照してください。

次のオプションは、 .exe ファイル、 .dll ファイル、および .winmd ファイルをファイル出力またはコンソール出力する場合にだけ有効です。

オプション 説明
/all /header/bytes/stats/classlist/tokens の各オプションの組み合わせを指定します。
/classlist モジュールで定義されているクラスの一覧を含めます。
/forward 事前のクラス宣言を使用します。
/headers 出力にファイル ヘッダー情報を組み込みます。
/item: class[:: member[(sig]] 指定した引数に応じて、次の要素を逆アセンブルします。

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

.NET Framework Version 1.0 および 1.1 では、(sig) のように、sig の後に閉じかっこを付ける必要があります。 .NET Framework 2.0 以降では、閉じかっこを省略して (sig とする必要があります。
/noil IL アセンブリ コードが出力されなくなります。
/stats イメージの統計情報を含めます。
/typelist ラウンド トリップの型の順序を保存するために、型の完全な一覧を生成します。
/unicode 出力に Unicode エンコードを使用します。
/utf8 出力に UTF-8 エンコードを使用します。 既定値は ANSI です。

次のオプションは、 .exe.dll.obj.lib、および .winmd の各ファイルをファイル出力またはコンソール出力する場合にだけ有効です。

オプション 説明
/metadata[=specifier] メタデータを表示します。ここで、specifier は次のとおりです。

MDHEADER — メタデータのヘッダー情報とサイズを表示します。

HEX — ワードおよび 16 進で情報を表示します。

CSV — レコード数およびヒープ サイズを表示します。

UNREX — 未解決の外部項目を表示します。

SCHEMA — メタデータ ヘッダーおよびスキーマ情報を表示します。

RAW — 未処理のメタデータ テーブルを表示します。

HEAPS — 未処理のヒープを表示します。

VALIDATE — メタデータの一貫性を検証します。

/metadata を複数回指定し、specifierに異なる値を指定できます。

次のオプションは、 .lib ファイルをファイル出力またはコンソール出力する場合にだけ有効です。

オプション 説明
/objectfile=filename 指定したライブラリ内の単一のオブジェクト ファイルのメタデータを表示します。

Note

Ildasm.exe に関するすべてのオプションでは大文字と小文字が区別されず、先頭の 3 文字で認識されます。 たとえば、 /quo/quoteallnames と等価です。 引数を伴うオプションの場合は、オプションと引数の間に区切り記号としてコロン (:) または等号 (=) を挿入できます。 たとえば、/output: filename/output= filename と同等です。

解説

Ildasm.exe はディスク上のファイルについてだけ動作します。 グローバル アセンブリ キャッシュ内にインストールされたファイルについては動作しません。

Ildasm.exe で生成されるテキスト ファイルを IL アセンブラー (Ilasm.exe) に対する入力として使用できます。 これは、必ずしもランタイム メタデータ属性のすべてをサポートしないプログラミング言語で記述されたコードをコンパイルするときなどに便利です。 コードをコンパイルし、その出力を Ildasm.exe で実行した後、生成された IL テキスト ファイルを手作業で編集して足りない属性を追加できます。 このテキスト ファイルを IL アセンブラーで実行すると、最終的な実行可能ファイルを生成できます。

Note

現時点では、埋め込みのネイティブ コード (たとえば Visual C++ で生成された PE ファイル) を含む PE ファイルについては、この手法を使用できません。

IL 逆アセンブラーで既定の GUI を使用すると、既存のどの PE ファイルのメタデータおよび逆アセンブルしたコードでも、階層ツリー ビューで表示できます。 GUI を使用するには、引数 PEfilename またはその他のオプションを指定せずに、コマンド行で「ildasm」と入力します。 [ファイル] メニューで、Ildasm.exe に読み込む PE ファイルまで移動できます。 選択した PE ファイルについて表示されたメタデータおよび逆アセンブルしたコードを保存するには、 [ファイル] メニューの [ダンプ] をクリックします。 階層ツリー ビューだけを保存するには、 [ファイル] メニューの [ツリービューをダンプ] をクリックします。 Ildasm.exe へのファイルの読み込みとその出力の解釈について詳しくは、Windows SDK に付属している Samples フォルダー内にある、Ildasm.exe のチュートリアルを参照してください。

Ildasm.exe に対して、埋め込みリソースを含む引数 PEfilename を指定した場合は、複数の出力ファイルが生成されます。生成されるファイルは、IL コードを含む 1 つのテキスト ファイルと、埋め込みマネージド リソースごとにリソース名を使用してメタデータから生成した .resources ファイルです。 アンマネージ リソースが PEfilename の中に埋め込まれている場合は、IL 出力に対して /output オプションで指定されたファイル名を使用して、.res ファイルが生成されます。

Note

Ildasm.exe では、入力ファイルの .obj.lib についてはメタデータの説明だけが表示されます。 これらの種類のファイルの場合、IL コードは逆アセンブルされません。

Ildasm.exe を .exe ファイルまたは .dll ファイルに対して実行し、ファイルが管理されているかどうかを確認できます。 ファイルが管理されていない場合は、そのファイルに有効な共通言語ランタイム ヘッダーがないため、逆アセンブルできないことを示すメッセージが表示されます。 ファイルが管理されている場合は、処理が正常に行われます。

バージョン情報

.NET Framework 4.5 以降、未処理のバイナリ コンテンツを表示することで、認識できないマーシャリング BLOB (バイナリ ラージ オブジェクト) が Ildasm.exe によって処理されます。 たとえば、C# プログラムで生成されたマーシャル BLOB の表示方法を次のコードに示します。

public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32  marshal({ 46 }) test) cil managed

次の Ildasm.exe の出力からの抜粋に示すように、.NET Framework 4.5 以降、Ildasm.exe ではインターフェイス実装に適用される属性が表示されます。

.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

使用例

PE ファイル MyHello.exe のメタデータと逆アセンブルしたコードを、Ildasm.exe の既定の GUI で表示するコマンドを次に示します。

ildasm myHello.exe

ファイル MyFile.exe を逆アセンブルし、生成される IL アセンブラー テキストをファイル MyFile.il に格納するコマンドを次に示します。

ildasm MyFile.exe /output:MyFile.il

ファイル MyFile.exe を逆アセンブルし、生成される IL アセンブラーをコンソール ウィンドウに表示するコマンドを次に示します。

ildasm MyFile.exe /text

MyApp.exe ファイルに埋め込みのマネージド リソースとアンマネージド リソースが含まれる場合、次のコマンドを実行すると 4 つのファイル (MyApp.ilMyApp.resIcons.resourcesMessage.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

Note

.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 を省略します。 int32string のようなプリミティブ型でないクラス型には名前空間を含め、キーワード class を前に付ける必要があります。 外部の型には、角かっこで囲んだライブラリ名を前に付ける必要があります。 MyMethod 型の 1 つのパラメーターと AppDomain 型の戻り値を持つ、AppDomain という名前の静的メソッドを逆アセンブルするコマンドを次に示します。

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

入れ子になった型は、クラスを前に付けてスラッシュで区切る必要があります。 たとえば、MyNamespace.MyClass クラスに NestedClass という名前の入れ子になったクラスが含まれている場合は、class MyNamespace.MyClass/NestedClass のように指定します。

関連項目