Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Дизассемблер IL является сопутствующим инструментом ассемблера IL (Ilasm.exe). Ildasm.exe принимает переносимый исполняемый файл (PE-файл), содержащий код на промежуточном языке (IL), и создает на его основе текстовый файл, который может служить входным файлом для Ilasm.exe.
Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.
Введите в командной строке: .
Синтаксис
ildasm [options] [PEfilename] [options]
Параметры
Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD.
| Вариант | Описание |
|---|---|
/out=filename |
Создает выходной файл с заданным параметром filename вместо вывода результатов в графический пользовательский интерфейс. |
| /rtf | Выводит данные в формате RTF. Не может использоваться с параметром /text. |
| /text | Отображает результаты в окне консоли вместо вывода в графический пользовательский интерфейс или выходной файл. |
| /html | Выводит данные в формате HTML. Может использоваться только с параметром /output. |
| /? | Отображает синтаксис команд и параметров для средства. |
Перечисленные ниже дополнительные параметры допустимы для файлов EXE, DLL и WINMD.
| Вариант | Описание |
|---|---|
| /bytes | Отображает фактические байты в шестнадцатеричном формате в виде комментариев к инструкциям. |
| /caverbal | Создает большие двоичные объекты настраиваемых атрибутов в текстовом виде. По умолчанию задана двоичная форма. |
| /linenum | Включает ссылки на строки исходного файла. |
| /nobar | Подавляет вывод всплывающего окна с индикатором хода выполнения дизассемблирования. |
| /noca | Подавляет вывод настраиваемых атрибутов. |
| /project | Отображает метаданные в представлении для управляемого кода, а не так, как их представляет среда выполнения Windows в машинном коде. Если параметр PEfilename не является файлом метаданных Windows (WINMD-файлом), этот параметр не учитывается. См. раздел Поддержка приложений для Магазина Windows и среды выполнения Windows в .NET Framework. |
| /pubonly | Дизассемблирует только открытые типы и члены. Эквивалентен /visibility:PUB. |
| /quoteallnames | Заключает все имена в одинарные кавычки. |
| /raweh | Отображает предложения обработки исключений в исходном виде. |
| /source | Отображает строки исходного кода в виде комментариев. |
| /tokens | Отображает токены метаданных классов и членов. |
/видимость:vis[+vis...] |
Дизассемблирует только типы и члены с заданной областью видимости. Допустимы следующие значения аргумента vis:PUB — общедоступнаяPRI — частныйFAM — семьяASM — сборкаFAA — семья и сборкаFOA — семья или сборкаPSC — частная областьОпределения модификаторов видимости см. в описании MethodAttributes и TypeAttributes. |
Перечисленные ниже параметры допустимы для файлов EXE, DLL и WINMD только при выводе в файл или окно консоли.
| Вариант | Описание |
|---|---|
| /all | Задает сочетание параметров /header, /bytes, /stats, /classlist и /tokens. |
| /classlist | Включает список классов, определенных в этом модуле. |
| /forward | Использует прямое объявление класса. |
| /headers | Включает сведения заголовка файла в выходные данные. |
/пункт:class[::member[(sig]] |
В зависимости от заданных аргументов выполняет дизассемблирование: дизассемблируется указанный class;дизассемблируется указанный член member этого класса class;дизассемблируется член member класса class с указанной сигнатурой sig. Формат sig выглядит следующим образом:[ instance] returnType(parameterType1, parameterType2..., ..., parameterTypeN). |
| /noil | Подавляет вывод кода сборки IL. |
| /stats | Включает статистику по образу. |
| /typelist | Создает полный список типов, чтобы сохранить упорядочение типов в круговом пути. |
| /unicode | Использует для выходных данных кодировку Юникод. |
| /utf8 | Использует для выходных данных кодировку UTF-8. ANSI является значением по умолчанию. |
Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD только при выводе в файл или окно консоли.
| Вариант | Описание |
|---|---|
/metadata[=specifier] |
Отображает метаданные, при этом параметр specifier может принимать следующие значения:MDHEADER — отображение сведений о заголовке метаданных и размерах.HEX — отображение сведений в шестнадцатеричном виде, а также в словах.CSV — отображение количества записей и размеров кучи.UNREX — отображение неразрешенных внешних данных.SCHEMA — отображение заголовка метаданных и сведений о схеме.RAW — отображение необработанных таблиц метаданных.HEAPS — Показать необработанные кучи.VALIDATE — проверка согласованности метаданных.Параметр /metadata можно задать несколько раз с различными значениями аргумента specifier. |
Перечисленные ниже параметры допустимы для LIB-файлов только при выводе в файл или окно консоли.
| Вариант | Описание |
|---|---|
/objectfile=filename |
Вывод метаданных отдельного объектного файла из заданной библиотеки. |
Примечание.
Параметры программы Ildasm.exe не учитывают регистр и распознаются по первым трем буквам. Например, команда /quo эквивалентна команде /quoteallnames. Разделителем параметра и его аргумента может служить двоеточие (:) или знак равенства (=). Например, команда /output:имя_файла эквивалентна команде /output=имя_файла.
Замечания
Программа Ildasm.exe работает только с PE-файлами, расположенными на жестком диске. Программа не обрабатывает файлы, установленные в глобальном кэше сборок.
Текстовый файл, созданный программой Ildasm.exe, можно передавать в качестве входных данных в ассемблер IL (Ilasm.exe). Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения. После компиляции кода и обработки результатов с помощью Ildasm.exe можно вручную добавить недостающие атрибуты в полученный текстовый файл IL. Чтобы создать окончательный исполняемый файл, следует обработать этот текстовый файл ассемблером IL.
Примечание.
На данный момент такая технология не применяется к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++).
Для просмотра метаданных и дизассемблированного кода PE-файлов в иерархическом представлении в виде дерева применяется графический пользовательский интерфейс по умолчанию дизассемблера IL. Чтобы использовать графический интерфейс, введите ildasm в командной строке без указания аргумента PEfilename или каких-либо параметров.
File В меню можно перейти к pe-файлу, который требуется загрузить в Ildasm.exe. Чтобы сохранить метаданные и разобрать код, отображаемый для выбранного PE, выберите Dump команду в File меню. Чтобы сохранить только иерархическое представление дерева, выберите команду Dump Treeview в File меню. Дополнительные инструкции по загрузке файла в программу Ildasm.exe и интерпретации выходных данных см. в руководстве по Ildasm.exe, которое находится в папке Samples в Windows SDK.
Если программе Ildasm.exe задан аргумент имя_PE-файла, содержащий внедренные ресурсы, будет создано несколько выходных файлов: текстовый файл с IL-кодом и RESOURCES-файл для каждого внедренного управляемого ресурса (название файла соответствует названию ресурса в метаданных). Если в аргумент имя_PE-файла внедрены неуправляемые ресурсы, будет создан RES-файл с именем, указанным для IL-вывода в параметре /output.
Примечание.
Для входных файлов OBJ и LIB программа Ildasm.exe отображает только описания метаданных. IL-код для файлов этих типов не дизассемблируется.
Чтобы определить, является ли файл EXE или DLL управляемым, обработайте его программой Ildasm.exe. Если файл не является управляемым, программа выдаст сообщение, что у файла отсутствует допустимый заголовок среды CLR и он не может быть дизассемблирован. Если файл является управляемым, программа будет выполнена без ошибок.
Сведения о версии
Начиная с платформа .NET Framework 4.5, Ildasm.exe обрабатывает нераспознанный маршал BLOB (двоичный большой объект), отображая необработанное двоичное содержимое. В следующем примере показано, как отображается маршалинговый объект BLOB, созданный программой C#:
public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32 marshal({ 46 }) test) cil managed
Начиная с версии платформа .NET Framework 4.5 Ildasm.exe отображает атрибуты, применяемые к реализации интерфейса, как показано в следующем фрагменте из выходных данных Ildasm.exe:
.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 )
…
Примеры
Следующая команда выводит метаданные и дизассемблированный код PE-файла MyHello.exe в стандартный графический пользовательский интерфейс программы Ildasm.exe.
ildasm myHello.exe
Следующая команда дизассемблирует файл MyFile.exe и сохраняет выходной текст ассемблера IL в файле MyFile.il.
ildasm MyFile.exe /output:MyFile.il
Следующая команда дизассемблирует файл MyFile.exe и выводит выходной текст ассемблера IL в окно консоли.
ildasm MyFile.exe /text
Если файл MyApp.exe содержит внедренные управляемые и неуправляемые ресурсы, при выполнении следующей команды будет создано четыре файла: MyApp.il, MyApp.res, Icons.resources и Message.resources.
ildasm MyApp.exe /output:MyApp.il
Следующая команда дизассемблирует метод MyMethod класса MyClass в файле MyFile.exe и выводит результат в окно консоли.
ildasm /item:MyClass::MyMethod MyFile.exe /text
В предыдущем примере допустимо наличие нескольких методов с именем MyMethod и различными сигнатурами. Следующая команда расчленяет метод MyMethod экземпляра с типом возвращаемого void значения и типами int32 параметров и string.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Примечание.
В .NET Framework версии 1.0 и 1.1 открывающей скобке, которая следует за именем метода, должна соответствовать закрывающая скобка после сигнатуры: MyMethod(instance void(int32)). В .NET Framework 2.0 и более поздних версий закрывающая скобка должна быть опущена: MyMethod(instance void(int32).
Чтобы извлечь метод static (метод Shared в Visual Basic), следует опустить ключевое слово instance. Типы классов, которые не являются простыми типами (такими как int32 и string), должны включать пространство имен и перед ними необходимо указывать ключевое слово class. Перед внешними типами должно быть указано имя соответствующей библиотеки в квадратных скобках. Следующая команда дизассемблирует статический метод с именем MyMethod, имеющий один параметр типа AppDomain, и возвращает значение типа AppDomain.
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
Перед вложенным типом необходимо указывать содержащий его класс, отделенный косой чертой (/). Например, если класс MyNamespace.MyClass содержит вложенный класс с именем NestedClass, вложенный класс указывается следующим образом: class MyNamespace.MyClass/NestedClass.