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

長いインストラクションを短く最適化します。たとえば brbr.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 のコマンド プロンプト

概念

MSIL へのコンパイル