Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ассемблер IL создает переносимый исполняемый (PE) файл из сборки на промежуточном языке (IL). (Дополнительные сведения о IL см. в разделе Процесс управляемого выполнения.) Вы можете запустить результирующий исполняемый файл, содержащий IL и необходимые метаданные, чтобы определить, выполняется ли IL должным образом.
Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.
Введите в командной строке: .
Синтаксис
ilasm [options] filename [[options]filename...]
Параметры
| Аргумент | Description |
|---|---|
filename |
Имя исходного файла с расширением IL. В этом файле содержатся директивы объявления метаданных и символические инструкции IL. Программа Ilasm.exe может создать один PE-файл из нескольких исходных файлов, для чего следует указать несколько аргументов исходных файлов. Примечание. Убедитесь, что последняя строка кода в исходном IL-файле имеет либо конечный пробел, либо символ конца строки. |
| Вариант | Description |
|---|---|
| /32bitpreferred | Создает предпочтительно 32-разрядный образ (PE32). |
/выравнивание:integer |
Параметр integer задает значение "FileAlignment" в необязательном заголовке NT. Если в файле указана IL-директива ALIGNMENT, этот параметр ее переопределяет. |
| /appcontainer | Создает файл DLL или EXE, выполняющийся в контейнере приложения Windows, в качестве выходных данных. |
| /arm | Задает Advanced RISC Machine (ARM) как целевой процессор. Если разрядность образа не задана, в качестве значения по умолчанию используется /32bitpreferred. |
/основа:integer |
Параметр 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 и использует неявные точки последовательности. |
| /dll | Выходным файлом будет библиотека DLL. |
/enc:file |
Создает разности "Изменить и продолжить" из указанного файла источника. Данный аргумент предназначен только для использования в учебных заведениях и не поддерживается для коммерческого использования. |
| /exe | Выходным файлом будет исполняемый файл. Это значение по умолчанию. |
/Флаги:integer |
Параметр integer задает значение "ImageFlags" в заголовке среды CLR. Если в файле указана IL-директива CORFLAGS, этот параметр ее переопределяет. Список допустимых значений параметра integerсм. в CorHdr.h, COMIMAGE_FLAGS. |
| /fold | Свертывает идентичные тела методов в один. |
| / highentropyva | На выходе создает исполняемый файл, который поддерживает технологию Address Space Layout Randomization (ASLR) с высокой энтропией. (Используется по умолчанию для /appcontainer.) |
/включать:includePath |
Задает путь для поиска файлов, включенных с помощью команды #include. |
| /itanium | Задает Intel Itanium в качестве целевого процессора. Если разрядность образа не задана, в качестве значения по умолчанию используется /pe64. |
/ключ:keyFile |
Компилирует файл filename со строгой подписью с помощью закрытого ключа в keyFile. |
/ключ: @keySource |
Компилирует файл filename со строгой подписью с помощью закрытого ключа, созданного в keySource. |
| /listing | Создает файл списка со стандартными выходными данными. Если этот параметр не задан, файл списка не создается. Этот параметр не поддерживается в .NET Framework 2.0 и более поздних версиях. |
/mdv:versionString |
Задает строку версии метаданных. |
/msv:major.minor |
Задает версию потока метаданных, где major и minor являются целыми числами. |
| /noautoinherit | Отключает наследование по умолчанию из класса Object , если базовый класс не указан. |
| /nocorstub | Запрещает создание заглушки CORExeMain. |
| /nologo | Отключает отображение эмблемы Майкрософт при запуске. |
/выпуск:file.ext |
Задает имя и расширение выходного файла. По умолчанию имя выходного файла совпадает с именем первого исходного файла. Расширение по умолчанию — EXE. Если задан параметр /dll , по умолчанию используется расширение DLL. Примечание. Задание параметра /output:myfile.dll не равносильно указанию параметра /dll. Если параметр /dllне задан, будет создан исполняемый файл с именем myfile.dll. |
| /optimize | Оптимизирует длинные инструкции в короткие. Например, br в br.s. |
| /pe64 | Создает 64-разрядный образ (PE32+). Если целевой процессор не задан, по умолчанию используется /itanium. |
| /pdb | Создает PDB-файл, отслеживание отладочной информации не включается. |
| /quiet | Задает тихий режим и отключает вывод сведений о ходе сборки. |
/ресурс:file.res |
Включает указанный файл ресурсов в формате *.res в результирующем .exe или .dll файле. С параметром /resource может быть указан только один RES-файл. |
/ssver:int.int |
Задает номер версии подсистемы в необязательном заголовке NT. Для /appcontainer и /arm минимальным номером версии является 6.02. |
/стек:stackSize |
Задает stackSizeв качестве значения "SizeOfStackReserve" в необязательном заголовке NT. |
| /stripreloc | Указывает, что перемещения базового адреса не требуются. |
/подсистема:integer |
Параметр integer задает значение "subsystem" в необязательном заголовке NT. Если в файле указана IL-директива SUBSYSTEM, этот параметр ее переопределяет. Список допустимых значений параметра integer см. в winnt.h, IMAGE_SUBSYSTEM. |
| /x64 | Задает 64-разрядный процессор AMD в качестве целевого процессора. Если разрядность образа не задана, в качестве значения по умолчанию используется /pe64. |
| /? | Отображает синтаксис команд и параметров программы. |
Примечание.
Параметры программы Ilasm.exe не учитывают регистр и распознаются по первым трем буквам. Например, /lis эквивалентен /листингу и /res:myresfile.res эквивалентно /resource:myresfile.res. Параметры, указывающие аргументы, принимают двоеточие (:) или знак равенства (=) в качестве разделителя между параметром и аргументом. Например, /output:file.ext эквивалентно /output=file.ext.
Замечания
Ассемблер IL весьма полезен разработчикам ПО для создания и внедрения генераторов IL. Используя программу Ilasm.exe, компилятор и другие средства, разработчики могут сосредоточить свои усилия на работе с IL и создании метаданных, а не на преобразовании IL в формат PE-файла.
Аналогично таким компиляторам для среды выполнения, как C# и Visual Basic, программа Ilasm.exe не создает промежуточные объектные файлы и при создании PE-файла позволяет пропустить этап связывания.
Ассемблер IL может выразить все существующие метаданные и возможности IL языков программирования, предназначенные для взаимодействия со средой выполнения. С его помощью можно адекватно выразить на ассемблере IL и скомпилировать с помощью программы Ilasm.exe управляемый код, написанный на любом из этих языков.
Примечание.
Компиляция может завершиться ошибкой, если последняя строка кода в исходном IL-файле не имеет конечного пробела или символа конца строки.
Программа Ilasm.exe может применяться совместно с сопутствующей программой — Ildasm.exe. Программа Ildasm.exe анализирует PE-файл, содержащий IL-код, и создает текстовый файл, подходящий для обработки программой Ildasm.exe. Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения. После компиляции кода и обработки результатов с помощью программы Ildasm.exe можно вручную добавить недостающие атрибуты в полученный текстовый IL-файл. Чтобы создать итоговый исполняемый файл, этот текстовый файл следует обработать с помощью программы Ilasm.exe.
Эту технологию можно также использовать для создания одного PE-файла из нескольких PE-файлов, созданных различными компиляторами.
Примечание.
На данный момент такая технология не применяется к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++).
Чтобы обеспечить наибольшую точность совместной работы программ Ildasm.exe и Ilasm.exe, по умолчанию ассемблер не заменяет короткие коды на длинные, которые могут быть в источниках IL (или созданы другим компилятором). С помощью параметра /optimize можно заменить короткие коды там, где это возможно.
Примечание.
Программа Ildasm.exe работает только с файлами, расположенными на жестком диске. Программа не обрабатывает файлы, установленные в глобальном кэше сборок.
Дополнительные сведения о грамматике IL см. в файле asmparse.grammar в составе Windows SDK.
Сведения о версии
Начиная с платформа .NET Framework 4.5, можно подключить пользовательский атрибут к реализации интерфейса с помощью кода, аналогичного следующему:
.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 (двоичный большой объект) с помощью необработанного двоичного представления, как показано в следующем коде:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Дополнительные сведения о грамматике IL см. в файле asmparse.grammar в составе Windows SDK.
Примеры
Следующая команда выполняет сборку IL-файла myTestFile.il и создает исполняемый файл myTestFile.exe.
ilasm myTestFile
Следующая команда выполняет сборку IL-файла myTestFile.il и создает DLL-файл myTestFile.dll.
ilasm myTestFile /dll
Следующая команда выполняет сборку IL-файла myTestFile.il и создает DLL-файл myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
В следующем примере кода показано чрезвычайно простое приложение, отображающее "Hello World!" в консоли. Можно скомпилировать этот код и создать IL-файл с помощью программы Ildasm.exe.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Следующий пример кода IL соответствует предыдущему примеру кода на C#. Можно скомпилировать этот код в сборку с помощью ассемблера IL. Примеры кода IL и 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