Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Дизассемблер 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.