Ilasm.exe (IL アセンブラー)Ilasm.exe (IL Assembler)

IL アセンブラーは、ポータブル実行可能 (PE) ファイルを IL (Intermediate Language) から生成しますThe IL Assembler generates a portable executable (PE) file from intermediate language (IL). (IL の詳細については、「マネージド実行プロセス」を参照してください)。IL と必要なメタデータを含む実行可能ファイルを実行すると、IL が予測どおりに動作するかどうかを確認できます。(For more information on IL, see Managed Execution Process.) You can run the resulting executable, which contains IL and the required metadata, to determine whether the IL performs as expected.

このツールは、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:

構文Syntax

ilasm [options] filename [[options]filename...]

パラメーターParameters

引数Argument 説明Description
filename .il ソース ファイルの名前。The name of the .il source file. このファイルは、メタデータ宣言ディレクティブとシンボリック IL 命令で構成されます。This file consists of metadata declaration directives and symbolic IL instructions. 複数のソース ファイル引数を指定すると、Ilasm.exe で 1 つの PE ファイルを作成できます。Multiple source file arguments can be supplied to produce a single PE file with Ilasm.exe. 注: .il ソース ファイルのコードの最後の行に、後続の空白または行末文字のいずれかがあることを確認してください。Note: Ensure that the last line of code in the .il source file has either trailing white space or an end-of-line character.
オプションOption 説明Description
/32bitpreferred/32bitpreferred 32 ビット優先イメージ (PE32) を作成します。Creates a 32-bit-preferred image (PE32).
/alignment: integer/alignment: integer NT オプション ヘッダーの FileAlignment を integer で指定された値に設定します。Sets FileAlignment to the value specified by integer in the NT Optional header. このオプションは、ファイル指定されている .alignment IL ディレクティブをオーバーライドします。If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer 出力として、Windows アプリ コンテナー内で実行する .dll ファイルまたは .exe ファイルを作成します。Produces a .dll or .exe file that runs in the Windows app container, as output.
/arm/arm ターゲット プロセッサとして Advanced RISC Machine (ARM) を指定します。Specifies the Advanced RISC Machine (ARM) as the target processor.

イメージのビット数を指定しない場合、既定は /32bitpreferredです。If no image bitness is specified, the default is /32bitpreferred.
/base: integer/base: integer NT オプション ヘッダーの ImageBase を integer で指定された値に設定します。Sets ImageBase to the value specified by integer in the NT Optional header. このオプションは、ファイルに指定されている .imagebase IL ディレクティブをオーバーライドします。If the .imagebase IL directive is specified in the file, this option overrides it.
/clock/clock 指定した .il ソース ファイルのコンパイル時間を計測して報告します。Measures and reports the following compilation times in milliseconds for the specified .il source file:

Total Run: 後に続く特定の操作の実行に要した合計時間。Total Run: The total time spent performing all the specific operations that follow.

Startup: ファイルを読み込み、開く。Startup: Loading and opening the file.

Emitting MD:メタデータの出力。Emitting MD: Emitting metadata.

Ref to Def Resolution: ファイルの定義への参照の解決。Ref to Def Resolution: Resolving references to definitions in the file.

CEE File Generation: メモリ内のファイル イメージの生成。CEE File Generation: Generating the file image in memory.

PE File Writing: PE へのイメージの書き込み。PE File Writing: Writing the image to a PE file.
/debug[:IMPL|OPT]/debug[:IMPL|OPT] デバッグ情報 (ローカル変数と引数名、および行番号) を組み込みます。Includes debug information (local variable and argument names, and line numbers). PDB ファイルを作成します。Creates a PDB file.

/debug に値を追加しなければ、JIT の最適化が無効になり、PDB ファイルのシーケンス ポイントが使用されます。/debug with no additional value disables JIT optimization and uses sequence points from the PDB file.

IMPL を指定すると、JIT 最適化が無効になり、暗黙のシーケンス ポイントが使用されます。IMPL disables JIT optimization and uses implicit sequence points.

OPT を指定すると、JIT 最適化が有効になり、暗黙のシーケンス ポイントが使用されます。OPT enables JIT optimization and uses implicit sequence points.
/dll/dll 出力として .dll ファイルを生成します。Produces a .dll file as output.
/enc: file/enc: file 指定されたソース ファイルからエディット コンティニュ デルタを作成します。Creates Edit-and-Continue deltas from the specified source file.

この引数は教育機関専用のため、商業目的の使用はサポートされていません。This argument is for academic use only and is not supported for commercial use.
/exe/exe 出力として実行可能ファイルを生成します。Produces an executable file as output. 既定値です。This is the default.
/flags: integer/flags: integer 共通言語ランタイム ヘッダーの ImageFlags を integer で指定された値に設定します。Sets ImageFlags to the value specified by integer in the common language runtime header. このオプションは、ファイルに指定されている .corflags IL ディレクティブをオーバーライドします。If the .corflags IL directive is specified in the file, this option overrides it. 有効な integerの値の一覧については、CorHdr.h で COMIMAGE_FLAGS を参照してください。See CorHdr.h, COMIMAGE_FLAGS for a list of valid values for integer.
/fold/fold 複数の同じメソッド本体を 1 つに折りたたみます。Folds identical method bodies into one.
/highentropyva/highentropyva 高エントロピ ASLR (Address Space Layout Randomization) をサポートする出力実行可能プログラムを作成します。Produces an output executable that supports high-entropy address space layout randomization (ASLR). (既定では /appcontainer)。(Default for /appcontainer.)
/include: includePath/include: includePath #includeによってインクルードされるファイルの検索パスを設定します。Sets a path to search for files included with #include.
/itanium/itanium ターゲット プロセッサとして Intel Itanium を指定します。Specifies Intel Itanium as the target processor.

イメージのビット数を指定しない場合、既定は /pe64です。If no image bitness is specified, the default is /pe64.
/key: keyFile/key: keyFile filename に含まれる秘密キーを使って、厳密な署名を持つ keyFile をコンパイルします。Compiles filename with a strong signature using the private key contained in keyFile.
/key: @keySource/key: @keySource filename で生成された秘密キーを使って、厳密な署名を持つ keySource をコンパイルします。Compiles filename with a strong signature using the private key produced at keySource.
/listing/listing 標準出力にリスティング ファイルを生成します。Produces a listing file on the standard output. このオプションを省略すると、リスティング ファイルは生成されません。If you omit this option, no listing file is produced.

このパラメーターは、.NET Framework 2.0 以降ではサポートされません。This parameter is not supported in the .NET Framework 2.0 or later.
/mdv: versionString/mdv: versionString メタデータのバージョン文字列を設定します。Sets the metadata version string.
/msv: major.minor/msv: major.minor メタデータのストリーム バージョンを設定します。ここで、 majorminor は整数です。Sets the metadata stream version, where major and minor are integers.
/noautoinherit/noautoinherit 基底クラスが指定されていない場合、 Object からの既定の継承を無効にします。Disables default inheritance from Object when no base class is specified.
/nocorstub/nocorstub CORExeMain スタブの生成を抑止します。Suppresses generation of the CORExeMain stub.
/nologo/nologo Microsoft 著作権情報を表示しません。Suppresses the Microsoft startup banner display.
/output: file.ext/output: file.ext 出力ファイルの名前と拡張子を指定します。Specifies the output file name and extension. 既定では、出力ファイルの名前は最初のソース ファイルの名前と同じです。By default, the output file name is the same as the name of the first source file. 既定の拡張子は .exe です。The default extension is .exe. /dll オプションを指定した場合の既定の拡張子は .dll です。If you specify the /dll option, the default extension is .dll. 注: /output :myfile.dll と指定しても /dll オプションは設定されません。Note: Specifying /output:myfile.dll does not set the /dll option. /dllを指定しないと、myfile.dll という名前の実行可能ファイルになります。If you do not specify /dll, the result will be an executable file named myfile.dll.
/optimize/optimize 長いインストラクションを短く最適化します。Optimizes long instructions to short. たとえば brbr.sにします。For example, br to br.s.
/pe64/pe64 64 ビットのイメージ (PE32+) を作成します。Creates a 64-bit image (PE32+).

ターゲット プロセッサを指定しない場合、既定は /itaniumです。If no target processor is specified, the default is /itanium.
/pdb/pdb デバッグ情報の追跡を有効にせずに PDB ファイルを作成します。Creates a PDB file without enabling debug information tracking.
/quiet/quiet クワイエット モードを指定します。アセンブリの進行状況はレポートされません。Specifies quiet mode; does not report assembly progress.
/resource: file.res/resource: file.res 指定した *.res 形式のリソース ファイルを生成される .exe ファイルまたは .dll ファイルに組み込みます。Includes the specified resource file in *.res format in the resulting .exe or .dll file. /resource オプションで指定できる .res ファイルは 1 つだけです。Only one .res file can be specified with the /resource option.
/ssver: int.int/ssver: int.int NT オプション ヘッダーのサブシステム バージョン番号を設定します。Sets the subsystem version number in the NT optional header. /appcontainer および /arm では、最小バージョン番号は 6.02 です。For /appcontainer and /arm the minimum version number is 6.02.
/stack: stackSize/stack: stackSize NT Optional ヘッダーの SizeOfStackReserve 値を stackSizeに設定します。Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc ベースの再配置が不要であることを指定します。Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer NT オプション ヘッダーのサブシステムを integer で指定された値に設定します。Sets subsystem to the value specified by integer in the NT Optional header. このコマンドは、ファイルに指定されている .subsystem IL ディレクティブをオーバーライドします。If the .subsystem IL directive is specified in the file, this command overrides it. 有効な integer の値の一覧については、winnt.h で IMAGE_SUBSYSTEM を参照してください。See winnt.h, IMAGE_SUBSYSTEM for a list of valid values for integer.
/x64/x64 ターゲット プロセッサとして 64 ビットの AMD プロセッサを指定します。Specifies a 64-bit AMD processor as the target processor.

イメージのビット数を指定しない場合、既定は /pe64です。If no image bitness is specified, the default is /pe64.
/?/? このツールのコマンド構文とオプションを表示します。Displays command syntax and options for the tool.

注意

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

解説Remarks

IL アセンブラーは、IL ジェネレーターを設計および実装するツールの販売元を支援します。The IL Assembler helps tool vendors design and implement IL generators. ツールとコンパイラの開発者は、Ilasm.exe を使用することで、PE ファイル形式での IL の出力にかかわることなく、IL とメタデータの生成に集中できます。Using Ilasm.exe, tool and compiler developers can concentrate on IL and metadata generation without being concerned with emitting IL in the PE file format.

C# および Visual Basic など、ランタイムを対象とした他のコンパイラと同様に、Ilasm.exe も中間オブジェクト ファイルを生成しません。このため、PE ファイルを形成するためのリンク ステージが必要ありません。Similar to other compilers that target the runtime, such as C# and Visual Basic, Ilasm.exe does not produce intermediate object files and does not require a linking stage to form a PE file.

IL アセンブラーは、すべての既存メタデータ、およびランタイムを対象としたプログラミング言語の IL 機能を表現できます。The IL Assembler can express all the existing metadata and IL features of the programming languages that target the runtime. このため、このようなプログラミング言語で記述されたマネージド コードを IL アセンブラーで適切に表現し、Ilasm.exe でコンパイルできます。This allows managed code written in any of these programming languages to be adequately expressed in IL Assembler and compiled with Ilasm.exe.

注意

.il ソース ファイルのコードの最後の行に、後続の空白または行末文字がない場合、コンパイルに失敗することがあります。Compilation might fail if the last line of code in the .il source file does not have either trailing white space or an end-of-line character.

Ilasm.exe と、その対をなすツール Ildasm.exe を併用できます。You can use Ilasm.exe in conjunction with its companion tool, Ildasm.exe. Ildasm.exe は、IL コードを含む PE ファイルを使用して、Ilasm.exe への入力として適したテキスト ファイルを作成します。Ildasm.exe takes a PE file that contains IL code and creates a text file suitable as input to 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 the output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. このテキスト ファイルを Ilasm.exe で実行すると、最終的な実行可能ファイルを生成できます。You can then run this text file through the Ilasm.exe to produce a final executable file.

この方法を使用して、異なるコンパイラによって生成された複数の PE ファイルから 1 つの PE ファイルを生成することもできます。You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

注意

現時点では、埋め込みのネイティブ コード (たとえば 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++).

この Ildasm.exeIlasm.exe の組み合わせをできる限り正確に使用するため、アセンブラーは、既定では、IL ソース内に記述されている可能性がある (または別のコンパイラによって出力される可能性がある) 長いエンコーディングを短いエンコーディングに置換しません。To make this combined use of Ildasm.exe and Ilasm.exe as accurate as possible, by default the assembler does not substitute short encodings for long ones you might have written in your IL sources (or that might be emitted by another compiler). 可能な場合は、常に /optimize オプションを使用して、短いエンコーディングを置換します。Use the /optimize option to substitute short encodings wherever possible.

注意

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

IL の文法の詳細については、Windows Software Development Kit (SDK) の asmparse.grammar ファイルを参照してください。For more information about the grammar of IL, see the asmparse.grammar file in the Windows Software Development Kit (SDK).

バージョン情報Version Information

.NET Framework 4.5 以降では、次に類似するコードを使用することで、インターフェイス実装にカスタム属性を追加できます。Starting with the .NET Framework 4.5, you can attach a custom attribute to an interface implementation by using code similar to the following:

.class interface public abstract auto ansi IMyInterface
{
  .method public hidebysig newslot abstract virtual
    instance int32 method1() cil managed
  {
  } // end of method IMyInterface::method1
} // end of class IMyInterface
.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 )
      …

.NET Framework 4.5 以降では、次のコードに示すように、未処理のバイナリ表現を使用することで、任意のマーシャリング BLOB (バイナリ ラージ オブジェクト) を指定できます。Starting with the .NET Framework 4.5, you can specify an arbitrary marshal BLOB (binary large object) by using its raw binary representation, as shown in the following code:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

IL の文法の詳細については、Windows Software Development Kit (SDK) の asmparse.grammar ファイルを参照してください。For more information about the grammar of IL, see the asmparse.grammar file in the Windows Software Development Kit (SDK).

使用例Examples

IL ファイル myTestFile.il をアセンブルして実行可能ファイル myTestFile.exe を生成するコマンドを次に示します。The following command assembles the IL file myTestFile.il and produces the executable myTestFile.exe.

ilasm myTestFile

IL ファイル myTestFile.il をアセンブルして .dll ファイル myTestFile.dll を生成するコマンドを次に示します。The following command assembles the IL file myTestFile.il and produces the .dll file myTestFile.dll.

ilasm myTestFile /dll

IL ファイル myTestFile.il をアセンブルして .dll ファイル myNewTestFile.dll を生成するコマンドを次に示します。The following command assembles the IL file myTestFile.il and produces the .dll file myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

コンソールに "Hello World!"The following code example shows an extremely simple application that displays "Hello World!" 記述するだけです。to the console. このコードのコンパイル後に Ildasm.exe ツールを使用して、IL ファイルを生成できます。You can compile this code and then use the Ildasm.exe tool to generate an IL file.

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

次の IL コードの例は、前の C# のコード例に対応しています。The following IL code example corresponds to the previous C# code example. IL アセンブラー ツールを使うと、このコードをアセンブリにコンパイルできます。You can compile this code into an assembly using the IL Assembler tool. IL コードと C# コードの例は、どちらもコンソールに "Hello World!"Both IL and C# code examples display "Hello World!" 記述するだけです。to the console.

// 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

関連項目See also