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

IL 逆アセンブラーは、IL アセンブラー (Ilasm.exe) と対をなすツールです。The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). Ildasm.exe は、中間言語 (IL: Intermediate Language) コードを含む、ポータブル実行可能 (PE) ファイルを使用して、Ilasm.exe に対する入力として適したテキスト ファイルを作成します。Ildasm.exe takes a portable executable (PE) file that contains intermediate language (IL) code and creates a text file suitable as input to Ilasm.exe.

このツールは、Visual Studio と共に自動的にインストールされます。This tool is automatically installed with Visual Studio. このツールを実行するには、Visual Studio 用開発者コマンド プロンプト (または Windows 7 の Visual Studio コマンド プロンプト) を使用します。To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). 詳細については、「Visual Studio 用開発者コマンド プロンプト」を参照してください。For more information, see Command Prompts.

コマンド プロンプトに次のように入力します。At the command prompt, type the following:


ildasm [options] [PEfilename] [options]


.exe.dll.obj.lib、および .winmd の各ファイルについて、次のオプションを使用できます。The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

オプションOption 説明Description
/out= filename/out= filename 結果をグラフィカル ユーザー インターフェイスに表示せずに、指定した filename を持つ出力ファイルを作成します。Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf 出力をリッチ テキスト形式で生成します。Produces output in rich text format. /text オプションと共に使用すると無効になります。Invalid with the /text option.
/text/text 結果をグラフィカル ユーザー インターフェイスまたは出力ファイルに出力せずに、コンソール ウィンドウに表示します。Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html 出力を HTML 形式で生成します。Produces output in HTML format. /output オプションと共に使用する場合にのみ有効です。Valid with the /output option only.
/?/? このツールのコマンド構文とオプションを表示します。Displays the command syntax and options for the tool.

.exe ファイル、 .dll ファイル、および .winmd ファイルについては、次のオプションも利用できます。The following additional options are available for .exe, .dll, and .winmd files.

オプションOption 説明Description
/bytes/bytes 実際のバイトを 16 進形式の命令コメントとして表示します。Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal カスタム属性の BLOB を Verbal 形式で生成します。Produces custom attribute blobs in verbal form. 既定はバイナリ形式です。The default is binary form.
/linenum/linenum 元のソース行への参照を組み込みます。Includes references to original source lines.
/nobar/nobar 逆アセンブルのプログレス インジケーター ポップアップ ウィンドウの表示を中止します。Suppresses the disassembly progress indicator pop-up window.
/noca/noca カスタム属性の出力を抑止します。Suppresses the output of custom attributes.
/project/project ネイティブ Windows Runtime に表示される方法ではなく、マネージド コードに表示される方法でメタデータを示します。Displays metadata the way it appears to managed code, instead of the way it appears in the native Windows Runtime. PEfilename が Windows メタデータ ( .winmd) ファイルではない場合、このオプションは無効になります。If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. Windows ストア アプリおよび Windows ランタイムのための .NET Framework サポート」を参照してください。See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly パブリックな型とメンバーだけを逆アセンブルします。Disassembles only public types and members. /visibility:PUBと等価です。Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames すべての名前を単一引用符で囲みます。Includes all names in single quotes.
/raweh/raweh 例外処理句を生の形式で表示します。Shows exception handling clauses in raw form.
/source/source 元のソース行をコメントとして表示します。Shows original source lines as comments.
/tokens/tokens クラスとメンバーのメタデータ トークンを表示します。Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] 指定した参照可能範囲を持つ型またはメンバーだけを逆アセンブルします。Disassembles only types or members with the specified visibility. vis の有効な値を次に示します。The following are valid values for vis:

PUB — PublicPUB — Public

PRI — PrivatePRI — Private

FAM — FamilyFAM — Family

ASM — AssemblyASM — Assembly

FAA — Family および AssemblyFAA — Family and Assembly

FOA — Family または AssemblyFOA — Family or Assembly

PSC — Private ScopePSC — Private Scope

以上の可視性修飾子の定義については、「MethodAttributes」と「TypeAttributes」を参照してください。For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

次のオプションは、 .exe ファイル、 .dll ファイル、および .winmd ファイルをファイル出力またはコンソール出力する場合にだけ有効です。The following options are valid for .exe, .dll, and .winmd files for file or console output only.

オプションOption 説明Description
/all/all /header/bytes/stats/classlist/tokens の各オプションの組み合わせを指定します。Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist モジュールで定義されているクラスの一覧を含めます。Includes a list of classes defined in the module.
/forward/forward 事前のクラス宣言を使用します。Uses forward class declaration.
/headers/headers 出力にファイル ヘッダー情報を組み込みます。Includes file header information in the output.
/item: class[ :: member[(sig]]/item: class[:: member[(sig]] 指定した引数に応じて、次の要素を逆アセンブルします。Disassembles the following depending upon the argument supplied:

- 指定した class を逆アセンブルします。- Disassembles the specified class.
- 指定した classmember を逆アセンブルします。- Disassembles the specified member of the class.
- 指定したシグネチャ sig を持つ classmember を逆アセンブルします。- Disassembles the member of the class with the specified signature sig. sig の形式は次のとおりです。The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
.NET Framework Version 1.0 および 1.1 では、(sig) のように、sig の後に閉じかっこを付ける必要があります。Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). .NET Framework 2.0 以降では、閉じかっこを省略して (sig とする必要があります。Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil IL アセンブリ コードが出力されなくなります。Suppresses IL assembly code output.
/stats/stats イメージの統計情報を含めます。Includes statistics on the image.
/typelist/typelist ラウンド トリップの型の順序を保存するために、型の完全な一覧を生成します。Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode 出力に Unicode エンコードを使用します。Uses Unicode encoding for the output.
/utf8/utf8 出力に UTF-8 エンコードを使用します。Uses UTF-8 encoding for the output. 既定値は ANSI です。ANSI is the default.

次のオプションは、 .exe.dll.obj.lib、および .winmd の各ファイルをファイル出力またはコンソール出力する場合にだけ有効です。The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

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

MDHEADER — メタデータのヘッダー情報とサイズを表示します。MDHEADER — Show the metadata header information and sizes.

HEX — ワードおよび 16 進で情報を表示します。HEX — Show information in hex as well as in words.

CSV — レコード数およびヒープ サイズを表示します。CSV — Show the record counts and heap sizes.

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

SCHEMA — メタデータ ヘッダーおよびスキーマ情報を表示します。SCHEMA — Show the metadata header and schema information.

RAW — 未処理のメタデータ テーブルを表示します。RAW — Show the raw metadata tables.

HEAPS — 未処理のヒープを表示します。HEAPS — Show the raw heaps.

VALIDATE — メタデータの一貫性を検証します。VALIDATE — Validate the consistency of the metadata.

/metadata を複数回指定し、specifierに異なる値を指定できます。You can specify /metadata multiple times, with different values for specifier.

次のオプションは、 .lib ファイルをファイル出力またはコンソール出力する場合にだけ有効です。The following options are valid for .lib files for file or console output only.

オプションOption 説明Description
/objectfile=filename/objectfile=filename 指定したライブラリ内の単一のオブジェクト ファイルのメタデータを表示します。Shows the metadata of a single object file in the specified library.


Ildasm.exe に関するすべてのオプションでは大文字と小文字が区別されず、先頭の 3 文字で認識されます。All options for Ildasm.exe are case-insensitive and recognized by the first three letters. たとえば、 /quo/quoteallnames と等価です。For example, /quo is equivalent to /quoteallnames. 引数を伴うオプションの場合は、オプションと引数の間に区切り記号としてコロン (:) または等号 (=) を挿入できます。Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. たとえば、 /output: filename/output= filenameと等価です。For example, /output: filename is equivalent to /output= filename.


Ildasm.exe はディスク上のファイルについてだけ動作します。Ildasm.exe only operates on PE files on disk. グローバル アセンブリ キャッシュ内にインストールされたファイルについては動作しません。It does not operate on files installed in the global assembly cache.

Ildasm.exe で生成されるテキスト ファイルを IL アセンブラー (Ilasm.exe) に対する入力として使用できます。The text file produced by Ildasm.exe can be used as input to the IL Assembler (Ilasm.exe). これは、必ずしもランタイム メタデータ属性のすべてをサポートしないプログラミング言語で記述されたコードをコンパイルするときなどに便利です。This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. コードをコンパイルし、その出力を Ildasm.exe で実行した後、生成された IL テキスト ファイルを手作業で編集して足りない属性を追加できます。After compiling the code and running its output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. このテキスト ファイルを IL アセンブラーで実行すると、最終的な実行可能ファイルを生成できます。You can then run this text file through the IL Assembler to produce a final executable file.


現時点では、埋め込みのネイティブ コード (たとえば Visual C++ で生成された PE ファイル) を含む PE ファイルについては、この手法を使用できません。Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

IL 逆アセンブラーで既定の GUI を使用すると、既存のどの PE ファイルのメタデータおよび逆アセンブルしたコードでも、階層ツリー ビューで表示できます。You can use the default GUI in the IL Disassembler to view the metadata and disassembled code of any existing PE file in a hierarchical tree view. GUI を使用するには、引数 PEfilename またはその他のオプションを指定せずに、コマンド行で「ildasm」と入力します。To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. [ファイル] メニューで、Ildasm.exe に読み込む PE ファイルまで移動できます。From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. 選択した PE ファイルについて表示されたメタデータおよび逆アセンブルしたコードを保存するには、 [ファイル] メニューの [ダンプ] をクリックします。To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. 階層ツリー ビューだけを保存するには、 [ファイル] メニューの [ツリービューをダンプ] をクリックします。To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Ildasm.exe へのファイルの読み込みおよび出力の解釈の詳細については、Windows Software Development Kit (SDK) に用意されている Samples フォルダー内の Ildasm.exe のチュートリアルを参照してください。For a detailed guide to loading a file into Ildasm.exe and interpreting the output, see the Ildasm.exe Tutorial, located in the Samples folder that ships with the Windows Software Development Kit (SDK).

Ildasm.exe に対して、埋め込みリソースを含む引数 PEfilename を指定した場合は、複数の出力ファイルが生成されます。生成されるファイルは、IL コードを含む 1 つのテキスト ファイルと、埋め込みマネージド リソースごとにリソース名を使用してメタデータから生成した .resources ファイルです。If you provide Ildasm.exe with a PEfilename argument that contains embedded resources, the tool produces multiple output files: a text file that contains IL code and, for each embedded managed resource, a .resources file produced using the resource's name from metadata. アンマネージ リソースが PEfilename の中に埋め込まれている場合は、IL 出力に対して /output オプションで指定されたファイル名を使用して、.res ファイルが生成されます。If an unmanaged resource is embedded in PEfilename, a .res file is produced using the filename specified for IL output by the /output option.


Ildasm.exe では、入力ファイルの .obj.lib についてはメタデータの説明だけが表示されます。Ildasm.exe shows only metadata descriptions for .obj and .lib input files. これらの種類のファイルの場合、IL コードは逆アセンブルされません。IL code for these file types is not disassembled.

Ildasm.exe を .exe ファイルまたは .dll ファイルに対して実行し、ファイルが管理されているかどうかを確認できます。You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. ファイルが管理されていない場合は、そのファイルに有効な共通言語ランタイム ヘッダーがないため、逆アセンブルできないことを示すメッセージが表示されます。If the file is not managed, the tool displays a message stating that the file has no valid common language runtime header and cannot be disassembled. ファイルが管理されている場合は、処理が正常に行われます。If the file is managed, the tool runs successfully.

バージョン情報Version Information

.NET Framework 4.5 以降、未処理のバイナリ コンテンツを表示することで、認識できないマーシャリング BLOB (バイナリ ラージ オブジェクト) が Ildasm.exe によって処理されます。Starting with the .NET Framework 4.5, Ildasm.exe handles an unrecognized marshal BLOB (binary large object) by displaying the raw binary content. たとえば、C# プログラムで生成されたマーシャル BLOB の表示方法を次のコードに示します。For example, the following code shows how a marshal BLOB generated by a C# program is displayed:

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 ではインターフェイス実装に適用される属性が表示されます。Starting with the .NET Framework 4.5, Ildasm.exe displays attributes that are applied to interface implementations, as shown in the following excerpt from Ildasm.exe output:

.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 で表示するコマンドを次に示します。The following command causes the metadata and disassembled code for the PE file MyHello.exe to display in the Ildasm.exe default GUI.

ildasm myHello.exe

ファイル MyFile.exe を逆アセンブルし、生成される IL アセンブラー テキストをファイル に格納するコマンドを次に示します。The following command disassembles the file MyFile.exe and stores the resulting IL Assembler text in the file

ildasm MyFile.exe /

ファイル MyFile.exe を逆アセンブルし、生成される IL アセンブラーをコンソール ウィンドウに表示するコマンドを次に示します。The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

MyApp.exe ファイルに埋め込みのマネージド リソースとアンマネージド リソースが含まれる場合、次のコマンドを実行すると 4 つのファイル (MyApp.ilMyApp.resIcons.resourcesMessage.resources) が生成されます。If the file MyApp.exe contains embedded managed and unmanaged resources, the following command produces four files:, MyApp.res, Icons.resources, and Message.resources:

ildasm MyApp.exe /

MyFile.exe 内のクラス MyClass に属するメソッド MyMethod を逆アセンブルし、その出力をコンソール ウィンドウに表示するコマンドを次に示します。The following command disassembles the method MyMethod within the class MyClass in MyFile.exe and displays the output to the console window.

ildasm /item:MyClass::MyMethod MyFile.exe /text

上の例では、異なるシグネチャを持つ MyMethod という名前のメソッドが複数存在する可能性があります。In the previous example, there could be several methods named MyMethod with different signatures. 戻り値の型 void、およびパラメーターの型 int32string を指定してインスタンス メソッド MyMethod を逆アセンブルするコマンドを次に示します。The following command disassembles the instance method MyMethod with the return type of void and the parameter types int32 and string.

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


.NET Framework Version 1.0 および 1.1 では、メソッド名の後にある左かっことシグネチャの後にある右かっこの数が一致するように MyMethod(instance void(int32)) とする必要があります。In the .NET Framework versions 1.0 and 1.1, the left parenthesis that follows the method name must be balanced by a right parenthesis after the signature: MyMethod(instance void(int32)). .NET Framework Version 2.0 以降では、閉じかっこを省略して MyMethod(instance void(int32) とする必要があります。Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

static メソッド (Visual Basic の Shared メソッド) を取得するには、キーワード instance を省略します。To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. int32string のようなプリミティブ型でないクラス型には名前空間を含め、キーワード class を前に付ける必要があります。Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. 外部の型には、角かっこで囲んだライブラリ名を前に付ける必要があります。External types must be preceded by the library name in square brackets. MyMethod 型の 1 つのパラメーターと AppDomain 型の戻り値を持つ、AppDomain という名前の静的メソッドを逆アセンブルするコマンドを次に示します。The following command disassembles a static method named MyMethod that has one parameter of type AppDomain and has a return type of AppDomain.

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

入れ子になった型は、クラスを前に付けてスラッシュで区切る必要があります。A nested type must be preceded by its containing class, delimited by a forward slash. たとえば、MyNamespace.MyClass クラスに NestedClass という名前の入れ子になったクラスが含まれている場合は、class MyNamespace.MyClass/NestedClass のように指定します。For example, if the MyNamespace.MyClass class contains a nested class named NestedClass, the nested class is identified as follows: class MyNamespace.MyClass/NestedClass.

関連項目See also