Ilasm.exe (ассемблер IL)Ilasm.exe (IL Assembler)

Ассемблер IL создает переносимый исполняемый (PE) файл на промежуточном языке (IL).The IL Assembler generates a portable executable (PE) file from intermediate language (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).To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Дополнительные сведения см. в разделе Командные строки.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 может создать один 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 Параметр integer задает значение "FileAlignment" в необязательном заголовке NT.Sets FileAlignment to the value specified by integer in the NT Optional header. Если в файле указана IL-директива ALIGNMENT, этот параметр ее переопределяет.If the .alignment IL directive is specified in the file, this option overrides it.
/appcontainer/appcontainer Создает файл DLL или EXE, выполняющийся в контейнере приложения Windows, в качестве выходных данных.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 Параметр integer задает значение "ImageBase" в необязательном заголовке NT.Sets ImageBase to the value specified by integer in the NT Optional header. Если в файле указана IL-директива IMAGEBASE, этот параметр ее переопределяет.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 Параметр integer задает значение "ImageFlags" в заголовке среды CLR.Sets ImageFlags to the value specified by integer in the common language runtime header. Если в файле указана IL-директива CORFLAGS, этот параметр ее переопределяет.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 Свертывает идентичные тела методов в один.Folds identical method bodies into one.
/highentropyva/highentropyva На выходе создает исполняемый файл, который поддерживает технологию Address Space Layout Randomization (ASLR) с высокой энтропией.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 Задает версию потока метаданных, где major и minor являются целыми числами.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 Отключает отображение эмблемы Майкрософт при запуске.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. Например, br в br.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-файл.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 Задает stackSizeв качестве значения "SizeOfStackReserve" в необязательном заголовке NT.Sets the SizeOfStackReserve value in the NT Optional header to stackSize.
/stripreloc/stripreloc Указывает, что перемещения базового адреса не требуются.Specifies that no base relocations are needed.
/subsystem: integer/subsystem: integer Параметр integer задает значение "subsystem" в необязательном заголовке NT.Sets subsystem to the value specified by integer in the NT Optional header. Если в файле указана IL-директива SUBSYSTEM, этот параметр ее переопределяет.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 не учитывают регистр и распознаются по первым трем буквам.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, компилятор и другие средства, разработчики могут сосредоточить свои усилия на работе с IL и создании метаданных, а не на преобразовании IL в формат PE-файла.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 анализирует PE-файл, содержащий IL-код, и создает текстовый файл, подходящий для обработки программой Ildasm.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-файла из нескольких PE-файлов, созданных различными компиляторами.You can also use this technique to produce a single PE file from several PE files originally generated by different compilers.

Примечание

На данный момент такая технология не применяется к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Чтобы обеспечить наибольшую точность совместной работы программ Ildasm.exe и Ilasm.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 см. в файле "asmparse.grammar" в разделе Windows SDKWindows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDKWindows Software Development Kit (SDK).

Сведения о версииVersion Information

Начиная с .NET Framework 4.5.NET Framework 4.5, к реализации интерфейса можно добавить свой атрибут с помощью кода, похожего на следующий.Starting with the .NET Framework 4.5.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.NET Framework 4.5, можно указать произвольный большой двоичный объект маршала (BLOB) с помощью необработанного двоичного представления, как показано в следующем коде.Starting with the .NET Framework 4.5.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 см. в файле "asmparse.grammar" в разделе Windows SDKWindows Software Development Kit (SDK).For more information about the grammar of IL, see the asmparse.grammar file in the Windows SDKWindows 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. Можно скомпилировать этот код и создать IL-файл с помощью программы Ildasm.exe.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#) на консоли отображается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

ИнструментыTools
Ildasm.exe (дизассемблер IL)Ildasm.exe (IL Disassembler)
Процесс управляемого выполненияManaged Execution Process
Командные строкиCommand Prompts