Поделиться через


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

Ассемблер MSIL создает переносимый исполняемый файл (PE) на языке MSIL. (Дополнительные сведения о библиотеках MSIL см. в разделе Процесс управляемого выполнения.) Можно выполнить полученный исполняемый файл, содержащий код MSIL и необходимые метаданные, чтобы проверить, выполняется ли код MSIL так, как ожидалось.

Это средство устанавливается автоматически с Visual Studio и пакетом SDK Windows. Чтобы запустить инструмент, мы рекомендуем использовать командную строку Visual Studio или командную строку пакета Windows SDK (командную оболочку). Эти служебные программы позволяют легко работать с инструментом, не переходя к папке установки. Дополнительные сведения см. в разделе Командная строка Visual Studio и пакета Windows SDK.

  • Если на компьютере установлена среда Visual Studio: на панели задач последовательно щелкните Start, All Programs, Visual Studio, Visual Studio Tools и Visual Studio Command Prompt.

    – или –

    Если на компьютере установлен пакет Windows SDK: на панели задач щелкните Start, выберите All Programs и откройте папку с пакетом Windows SDK, затем щелкните Command Prompt (или CMD Shell).

  • В командной строке введите следующее:

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

Параметры

Аргумент

Описание

filename

Имя исходного файла с расширением IL. В этом файле содержатся директивы объявления метаданных и символические инструкции MSIL. Ilasm.exe может создать один PE-файл из нескольких исходных файлов, для чего следует указать несколько аргументов исходных файлов.

ПримечаниеПримечание
Убедитесь, что последняя строка кода в исходном файле с расширением IL имеет либо конечный пробел, либо символ конца строки.

Параметр

Описание

/alignment =целое число

Аргумент integer задает значение поля FileAlignment в дополнительном заголовке NT. Если в файле указана IL-директива .alignment, этот параметр переопределяет ее.

/base =целое число

Аргумент integer задает значение поля ImageBase в дополнительном заголовке NT. Если в файле указана IL-директива .imagebase, этот параметр переопределяет ее.

/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 версии 2.0.

/dll

Выходным файлом будет библиотека DLL.

/enc=file

Создает разности "Изменить и продолжить" из указанного файла источника.

Данный аргумент предназначен только для использования в учебных заведениях и не поддерживается для коммерческого использования.

Новые возможности .NET Framework версии 2.0

/exe

Выходным файлом будет исполняемый файл. Это значение по умолчанию.

/flags =целое число

Аргумент integer задает значение поля ImageFlags в заголовке общеязыковой среды выполнения. Если в файле указана IL-директива .corflags, этот параметр переопределяет ее. Список допустимых значений аргумента integer см. в CorHdr.h, COMIMAGE_FLAGS.

/fold

Свертывает идентичные тела методов в один.

Новые возможности .NET Framework версии 2.0

/include=includePath

Задает путь для поиска файлов, включенных с помощью команды #include.

Новые возможности .NET Framework версии 2.0

/itanium

Задает Intel Itanium в качестве целевого процессора.

Если разрядность образа не задана, в качестве значения по умолчанию используется /pe64.

Новые возможности .NET Framework версии 2.0

/key:файл_ключа

Компилирует файл имя_файла со строгой подписью закрытым ключом из указанного файла_ключей.

/key:@источник_ключа

Компилирует файл имя_файла со строгой подписью закрытым ключом из указанного источника_ключа.

/listing

Создает файл списка со стандартным выводом программы. Если этот параметр не задан, файл списка не создается.

Этот параметр не поддерживается в версии .NET Framework 2.0 и более поздних.

/mdv=versionString

Задает строку версии метаданных.

Новые возможности .NET Framework версии 2.0

/msv=major.minor

Задает версию потока метаданных, где major и minor являются целыми числами.

Новые возможности .NET Framework версии 2.0

/noautoinherit

Отключает наследование по умолчанию от класса Object, если базовый класс не указан.

Новые возможности .NET Framework версии 2.0

/nocorstub

Запрещает создание заглушки CORExeMain.

Новые возможности .NET Framework версии 2.0

/nologo

Отключает отображение эмблемы Майкрософт при запуске.

/output:файл.расширение

Задает имя и расширение выходного файла. По умолчанию имя выходного файла совпадает с именем первого исходного файла. Расширение по умолчанию — .exe. Если задан параметр /dll, по умолчанию используется расширение .dll.

ПримечаниеПримечание
Задание параметра /output:myfile.dll не равносильно указанию параметра /dll .Если параметр /dll не задан, будет создан исполняемый файл с именем myfile.dll.

/optimize

Оптимизирует длинные инструкции в короткие. Например, br в br.s.

Новые возможности .NET Framework версии 2.0

/pe64

Создает 64-разрядное изображение (PE32+).

Если целевой процессор не задан, по умолчанию используется (/itanium).

Новые возможности .NET Framework версии 2.0

/pdb

Создает файл PDB без включения отслеживания отладочной информации.

Новые возможности .NET Framework версии 2.0

/quiet

Отключает вывод сведений о ходе сборки.

/resource:файл.res

Включает указанный файл ресурсов формате *.res в выходной файл .exe или .dll. С параметром /resource может быть указан только один RES-файл.

/stack=stackSize

Устанавливает stackSize в качестве значения SizeOfStackReserve в дополнительном заголовке NT.

Новые возможности .NET Framework версии 2.0

/stripreloc

Указывает, что не требуются перемещения базы.

Новые возможности .NET Framework версии 2.0

/subsystem=целое число

Аргумент integer задает значение поля subsystem в дополнительном заголовке NT. Если в файле указана IL-директива .subsystem, этот параметр переопределяет ее. Список допустимых значений аргумента integer см. winnt.h, IMAGE_SUBSYSTEM.

/x64

Задает 64-разрядный процессор AMD в качестве целевого процессора.

Если разрядность образа не задана, в качестве значения по умолчанию используется /pe64.

Новые возможности .NET Framework версии 2.0

/?

Отображает синтаксис команд и параметры программы.

ПримечаниеПримечание

Все параметры программы Ilasm.exe нечувствительны к регистру и могут быть сокращены до первых трех букв.Например, /lis эквивалентно /listing, а /res:myresfile.res эквивалентно /resource:myresfile.res.Разделителем параметра и его аргумента может служить двоеточие (:) или знак равенства (=).Например, команда /output:file.ext эквивалентна команде /output=file.ext.

Заметки

Ассемблер MSIL весьма полезен разработчикам ПО для создания и внедрения генераторов MSIL. При разработке инструментальных средств и компиляторов это средство позволяет сосредоточить усилия на написании MSIL-кода и генерации метаданных, а не на преобразовании MSIL-кода в формат PE-файла.

Аналогично таким компиляторам для среды выполнения, как C# и Visual Basic, программа Ilasm.exe не создает промежуточных объектных файлов и позволяет пропустить этап компоновки при генерации PE-файла.

Ассемблер MSIL может выразить все существующие метаданные и возможности MSIL языков программирования, предназначенные для взаимодействия со средой выполнения. Это позволяет адекватно выразить на ассемблере MSIL и скомпилировать с помощью программы Ilasm.exe управляемый код, написанный на любом из этих языков.

ПримечаниеПримечание

Компиляция может не удаться, если последняя строка кода в исходном файле с расширением IL не имеет либо конечного пробела, либо символа конца строки.

Ilasm.exe может применяться совместно с парным к нему инструментом, Ildasm.exe. Ildasm.exe принимает на вход PE-файл, содержащий код MSIL, и создает текстовый файл, который можно передать на вход Ilasm.exe. Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения. После компиляции кода и обработки результатов с помощью Ildasm.exe можно вручную добавить недостающие атрибуты в выходной текстовый файл MSIL. Чтобы создать окончательный исполняемый файл, обработайте этот текстовый файл программой Ilasm.exe.

Эта технология может быть применена для создания одного PE-файла из нескольких PE-файлов, созданных различными компиляторами.

ПримечаниеПримечание

На данный момент эта технология не может быть применена к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++).

Для того, чтобы совместное применение Ildasm.exe и Ilasm.exe порождало как можно меньше ошибок, ассемблер не выполняет некоторые простые действия по оптимизации, а именно не определяет, какую форму инструкций применить — короткую или полную. Например, инструмент не пытается определить возможность замены полной кодировки, указанной в исходном MSIL-коде или созданной другим компилятором, короткой формой. Чтобы использовать короткую кодировку, требуется явно выписать ее. Однако ассемблер проверяет условия выхода за границу там, где это возможно.

ПримечаниеПримечание

Программа Ildasm.exe работает только с файлами, расположенными на жестком диске.Программа не обрабатывает файлы, установленные в глобальный кэш сборок.

Дополнительные сведения о грамматике MSIL см. в файле asmparse.grammar в разделе Пакет средств разработки программного обеспечения (SDK) для Windows.

Примеры

Следующая команда выполняет сборку файла 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#. Можно скомпилировать данный код в сборку с помощью программы Ilasm.exe (ассемблер MSIL). Оба примера кода (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

См. также

Ссылки

Ildasm.exe (дизассемблер MSIL)

Командная строка Visual Studio и пакета Windows SDK

Основные понятия

Процесс управляемого выполнения

Другие ресурсы

Инструменты .NET Framework

Журнал изменений

Дата

Журнал

Причина

Апрель 2011

Добавлены сведения об использовании командных строк Visual Studio и Windows SDK.

Улучшение информации.