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
Основные понятия
Процесс управляемого выполнения
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Апрель 2011 |
Добавлены сведения об использовании командных строк Visual Studio и Windows SDK. |
Улучшение информации. |