MSIL アセンブラ (Ilasm.exe)
MSIL アセンブラは、ポータブル実行可能 (PE) ファイルを MSIL (Microsoft Intermediate Language) から生成します。MSIL の詳細については、「MSIL へのコンパイル」を参照してください。MSIL と必要なメタデータを含む実行可能ファイルを実行すると、MSIL が予測どおりに動作するかどうかを確認できます。
ilasm [options] filename [[options]filename...]
パラメータ
引数 | 説明 |
---|---|
filename |
.il ソース ファイルの名前。このファイルは、メタデータ宣言ディレクティブとシンボリック MSIL 命令で構成されます。複数のソース ファイル引数を指定すると、Ilasm.exe で 1 つの PE ファイルを作成できます。 |
オプション | 説明 |
---|---|
/alignment= integer |
NT オプション ヘッダーの FileAlignment を integer で指定された値に設定します。このオプションは、ファイル指定されている .alignment IL ディレクティブをオーバーライドします。 |
/base= integer |
NT オプション ヘッダーの ImageBase を integer で指定された値に設定します。このオプションは、ファイルに指定されている .imagebase IL ディレクティブをオーバーライドします。 |
/clock |
指定した .il ソース ファイルのコンパイル時間を計測して報告します。 Total Run: 後に続く特定の操作の実行に要した合計時間。 Startup: ファイルの読み込みとオープン。 Emitting MD: メタデータの生成。 Ref to Def Resolution: ファイルの定義への参照の解決。 CEE File Generation: メモリ内のファイル イメージの生成。 PE File Writing: PE へのイメージの書き込み。 |
/debug[=IMPL|OPT] |
デバッグ情報 (ローカル変数と引数名、および行番号) を組み込みます。PDB ファイルを作成します。 /debug に値を追加しなければ、JIT の最適化が無効になり、PDB ファイルのシーケンス ポイントが使用されます。 IMPL を指定すると、JIT 最適化が無効になり、暗黙のシーケンス ポイントが使用されます。 OPT を指定すると、JIT 最適化が有効になり、暗黙のシーケンス ポイントが使用されます。 IMPL 属性と OPT 属性は .NET Framework Version 2.0 で新たに追加されました。 |
/dll |
出力として .dll ファイルを生成します。 |
/enc=file |
指定されたソース ファイルからエディット コンティニュ デルタを作成します。 .NET Framework Version 2.0 で新たに追加されました。 |
/exe |
出力として実行可能ファイルを生成します。これは、既定の設定です。 |
/flags= integer |
共通言語ランタイム ヘッダーの ImageFlags を integer で指定された値に設定します。このオプションは、ファイルに指定されている .corflags IL ディレクティブをオーバーライドします。有効な integer の値の一覧については、CorHdr.h で COMIMAGE_FLAGS を参照してください。 |
/fold |
複数の同じメソッド本体を 1 つに折りたたみます。 .NET Framework Version 2.0 で新たに追加されました。 |
/include=includePath |
#include によってインクルードされるファイルの検索パスを設定します。 .NET Framework Version 2.0 で新たに追加されました。 |
/itanium |
ターゲット プロセッサとして Intel Itanium を指定します。 イメージのビット数を指定しない場合、既定は /pe64 です。 .NET Framework Version 2.0 で新たに追加されました。 |
/key: keyFile |
keyFile に含まれる秘密キーを使用して、厳密な署名を持つ filename をコンパイルします。 |
/key:@ keySource |
keySource で生成された秘密キーを使用して、厳密な署名を持つ filename をコンパイルします。 |
/listing |
標準出力にリスティング ファイルを生成します。このオプションを省略すると、リスティング ファイルは生成されません。 このパラメータは、.NET Framework Version 2.0 以降ではサポートされません。 |
/mdv=versionString |
メタデータのバージョン文字列を設定します。 .NET Framework Version 2.0 で新たに追加されました。 |
/msv=major.minor |
メタデータのストリーム バージョンを設定します。ここで、major と minor は整数です。 .NET Framework Version 2.0 で新たに追加されました。 |
/noautoinherit |
基本クラスが指定されていない場合、Object からの既定の継承を無効にします。 .NET Framework Version 2.0 で新たに追加されました。 |
/nocorstub |
CORExeMain スタブの生成を抑止します。 .NET Framework Version 2.0 で新たに追加されました。 |
/nologo |
Microsoft 著作権情報を表示しません。 |
/output: file.ext |
出力ファイルの名前と拡張子を指定します。既定では、出力ファイルの名前は最初のソース ファイルの名前と同じです。既定の拡張子は .exe です。/dll オプションを指定した場合の既定の拡張子は .dll です。 注意 /output:myfile.dll と指定しても /dll オプションは設定されません。/dll を指定しないと、myfile.dll という名前の実行可能ファイルになります。 |
/optimize |
長いインストラクションを短く最適化します。たとえば br を br.s にします。 .NET Framework Version 2.0 で新たに追加されました。 |
/pe64 |
64 ビットのイメージ (PE32+) を作成します。 ターゲット プロセッサを指定しない場合、既定は /itanium です。 .NET Framework Version 2.0 で新たに追加されました。 |
/pdb |
デバッグ情報の追跡を有効にせずに PDB ファイルを作成します。 .NET Framework Version 2.0 で新たに追加されました。 |
/quiet |
クワイエット モードを指定します。アセンブリの進行状況はレポートされません。 |
/resource: file.res |
指定した *.res 形式のリソース ファイルを生成される .exe ファイルまたは .dll ファイルに組み込みます。/resource オプションで指定できる .res ファイルは 1 つだけです。 |
/stack=stackSize |
NT Optional ヘッダーの SizeOfStackReserve 値を stackSize に設定します。 .NET Framework Version 2.0 で新たに追加されました。 |
/stripreloc |
ベースの再配置が不要であることを指定します。 .NET Framework Version 2.0 で新たに追加されました。 |
/subsystem= integer |
NT オプション ヘッダーのサブシステムを integer で指定された値に設定します。このコマンドは、ファイルに指定されている .subsystem IL ディレクティブをオーバーライドします。有効な integer の値の一覧については、winnt.h で IMAGE_SUBSYSTEM を参照してください。 |
/x64 |
ターゲット プロセッサとして 64 ビットの AMD プロセッサを指定します。 イメージのビット数を指定しない場合、既定は /pe64 です。 .NET Framework Version 2.0 で新たに追加されました。 |
/? |
このツールのコマンド構文とオプションを表示します。 |
注意
Ilasm.exe に関するすべてのオプションでは大文字と小文字が区別されず、先頭の 3 文字で認識されます。たとえば、/lis は /listing と等価であり、/res:myresfile.res は /resource:myresfile.res と等価です。引数を伴うオプションの場合は、オプションと引数の間に区切り記号としてコロン (:) または等号 (=) を挿入できます。たとえば、/output:file.ext は /output=file.ext と等価です。
解説
MSIL アセンブラは、MSIL ジェネレータを設計および実装するツールの販売元を支援します。ツールとコンパイラの開発者は、Ilasm.exe を使用することで、PE ファイル形式での MSIL の出力にかかわることなく、MSIL とメタデータの生成に集中できます。
C# および Visual Basic など、ランタイムを対象とした他のコンパイラと同様に、Ilasm.exe も中間オブジェクト ファイルを生成しません。このため、PE ファイルを形成するためのリンク ステージが必要ありません。
MSIL アセンブラは、すべての既存メタデータ、およびランタイムを対象としたプログラミング言語の MSIL 機能を表現できます。このため、このようなプログラミング言語で記述されたマネージ コードを MSIL アセンブラで適切に表現し、Ilasm.exe でコンパイルできます。
Ilasm.exe と、その対をなすツール Ildasm.exe を併用できます。Ildasm.exe は MSIL コードを含む PE ファイルを使用して、Ilasm.exe に対する入力として適したテキスト ファイルを作成します。これは、必ずしもすべてのランタイム メタデータ属性をサポートしないプログラミング言語で記述されたコードをコンパイルするときなどに便利です。コードをコンパイルし、その出力を Ildasm.exe で実行した後、生成された MSIL テキスト ファイルを手作業で編集して足りない属性を追加できます。このテキスト ファイルを Ilasm.exe で実行すると、最終的な実行可能ファイルを生成できます。
この方法を使用して、異なるコンパイラによって生成された複数の PE ファイルから 1 つの PE ファイルを生成することもできます。
注意
現時点では、埋め込みのネイティブ コード (たとえば Visual C++ で生成された PE ファイル) を含む PE ファイルについては、この手法を使用できません。
Ildasm.exe と Ilasm.exe を組み合わせて使用するときの処理をできる限り正確にするため、アセンブラではある種の単純な最適化処理が実行されません。具体的には、短形式または長形式の命令を使用するかどうかが推測されません。たとえば、長形式のエンコードがユーザーによって MSIL ソース内に書き込まれた (または他のコンパイラによって出力された) 場合でも、アセンブラは長形式のエンコードを短形式で代替できるかどうかを判断しません。短形式のエンコードが望ましい場合は、明示的に短形式で書く必要があります。ただし、可能な場合は、アセンブラは範囲外条件に関するチェックを実行します。
注意
Ildasm.exe はディスク上のファイルについてだけ動作します。グローバル アセンブリ キャッシュ内にインストールされたファイルについては動作しません。
MSIL の文法の詳細については、.NET Framework SDK の asmparse.grammar ファイルを参照してください。
例
MSIL ファイル myTestFile.il
をアセンブルして実行可能ファイル myTestFile.exe.
を生成するコマンドを次に示します。
ilasm myTestFile
MSIL ファイル myTestFile.il をアセンブルして .dll ファイル myTestFile.dll を生成するコマンドを次に示します。
ilasm myTestFile /dll
MSIL ファイル myTestFile.il をアセンブルして .dll ファイル myNewTestFile.dll を生成するコマンドを次に示します。
ilasm myTestFile /dll /output:myNewTestFile.dll
コンソールに "Hello World!" を表示する簡単なアプリケーションのコード例を次に示します。このコードのコンパイル後に Ildasm.exe ツールを使用して、MSIL ファイルを生成できます。
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
次の MSIL コードの例は、前の C# のコード例に対応しています。MSIL アセンブラ (Ilasm.exe) ツールを使用すると、このコードをアセンブリにコンパイルできます。MSIL コードと C# コードの例は、共にコンソールに "Hello World!" を表示します。
// Metadata version: v2.0.50215
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly sample
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x02F20000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Hello::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Hello::.ctor
} // end of class Hello
参照
関連項目
.NET Framework ツール
MSIL 逆アセンブラ (Ildasm.exe)
SDK のコマンド プロンプト