方法 : アセンブリの内容を表示する
Ildasm.exe (MSIL 逆アセンブラー) を使用して、ファイル内の MSIL (Microsoft Intermediate Language) 情報を表示できます。 内容を調べる対象のファイルがアセンブリの場合、この情報には、アセンブリの属性とほかのモジュールおよびアセンブリへの参照が含まれることがあります。 この情報は、ファイルがアセンブリまたはアセンブリの一部かどうか、およびファイルにほかのモジュールまたはアセンブリへの参照があるかどうかを判断するために役立ちます。
Ildasm.exe を使用してアセンブリの内容を表示するには
コマンド プロンプトに「ildasm <assembly name>」と入力します。 たとえば、次のコマンドでは、Hello.exe アセンブリが逆アセンブルされます。
ildasm Hello.exe
アセンブリ マニフェストの情報を表示するには
- MSIL 逆アセンブラー ウィンドウで、マニフェストのアイコンをダブルクリックします。
使用例
次の例では、基本の "Hello, World" プログラムを使用します。 プログラムをコンパイルしてから、Ildasm.exe を使用して Hello.exe アセンブリを逆アセンブルし、アセンブリ マニフェストを参照します。
Imports System
Class MainApp
Public Shared Sub Main()
Console.WriteLine("Hello World using Visual Basic!")
End Sub
End Class
using System;
class MainApp
{
public static void Main()
{
Console.WriteLine("Hello World using C#!");
}
}
using namespace System;
class MainApp
{
public:
static void Main()
{
Console::WriteLine("Hello World using C++/CLI!");
}
};
int main()
{
MainApp::Main();
}
Hello.exe アセンブリに対して ildasm.exe コマンドを実行し、IL 逆アセンブラー ウィンドウでマニフェストのアイコンをダブルクリックすると、次の内容が出力されます。
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly Hello
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x00600000
次の表は、例で使用した Hello.exe アセンブリのアセンブリ マニフェストにある各ディレクティブの説明です。
ディレクティブ |
説明 |
---|---|
.assembly extern <assembly name> |
現在のモジュールによって参照される項目を含む別のアセンブリを指定します (この例では mscorlib)。 |
.publickeytoken <token> |
参照されるアセンブリの実際のキーのトークンを指定します。 |
.ver <version number> |
参照されるアセンブリのバージョン番号を指定します。 |
.assembly <assembly name> |
アセンブリ名を指定します。 |
.hash algorithm <int32 value> |
使用されるハッシュ アルゴリズムを指定します。 |
.ver <version number> |
アセンブリのバージョン番号を指定します。 |
.module <file name> |
アセンブリを構成するモジュールの名前を指定します。 この例では、アセンブリは 1 つのファイルだけで構成されています。 |
.subsystem <value> |
プログラムが必要とするアプリケーション環境を指定します。 この例では、値 3 でこの実行可能ファイルがコンソールで実行されることを示します。 |
.corflags |
現在メタデータ内で予約済みのフィールドです。 |
アセンブリ マニフェストは、アセンブリの内容に応じて、多くの異なるディレクティブを格納できます。 アセンブリ マニフェストに含まれる多様なディレクティブの一覧については、ヨーロッパ電子計算機工業会 (ECMA : European Computer Manufacturer Association) のドキュメント、特に「Partition II: Metadata Definition and Semantics」および「Partition III: CIL Instruction Set」を参照してください。 このドキュメントはオンラインで入手できます。MSDN の「ECMA C# and Common Language Infrastructure Standards (ECMA C# および共通言語基盤 (CLI: Common Language Infrastructure) 規格)」および ECMA International Web サイトの「Standard ECMA-335 - Common Language Infrastructure (CLI) (標準の EMCA-335: 共通言語基盤 (CLI: Common Language Infrastructure))」を参照してください。