Ildasm.exe (дизассемблер MSIL)
Дизассемблер MSIL является парным инструментом к ассемблеру MSIL (Ilasm.exe). Ildasm.exe принимает входной исполняемый файл (PE-файл), содержащий код на языке MSIL, и создает на его основе текстовый файл, который может служить входным для программы Ilasm.exe.
Это средство устанавливается автоматически с 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).
В командной строке введите следующее:
ildasm [options] [PEfilename] [options]
Параметры
Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ и LIB.
Параметр |
Описание |
---|---|
/out=имя_файла |
Создает выходной файл с заданным именем_файла вместо вывода результатов в графическом интерфейсе пользователя. |
/rtf |
Создает выходные данные в формате RTF. Не может использоваться с параметром /text. Новые возможности .NET Framework версии 2.0 |
/text |
Выводит результаты работы на консоль, а не в графический интерфейс пользователя или выходной файл. |
/html |
Создает выходные данные в формате HTML. Может использоваться только с параметром /output. Новые возможности .NET Framework версии 2.0 |
/? |
Отображает синтаксис команд и параметров для инструмента. |
Следующие дополнительные параметры допустимы для EXE-файлов и DLL-файлов.
Параметр |
Описание |
---|---|
/bytes |
Отображает фактические байты в шестнадцатеричном формате в виде комментариев к инструкциям. |
/caverbal |
Создает двоичные объекты настраиваемых атрибутов в форме команд. По умолчанию задана двоичная форма. Новые возможности .NET Framework версии 2.0 |
/linenum |
Содержит ссылки на строки исходного файла. |
/nobar |
Подавляет вывод всплывающего окна с индикатором хода выполнения дизассемблирования. |
/noca |
Подавляет вывод настраиваемых атрибутов. Новые возможности .NET Framework версии 2.0 |
/pubonly |
Дизассемблируются только открытые типы и члены. Этот параметр является эквивалентом параметра /visibility:PUB. |
/quoteallnames |
Все имена заключаются в одинарные кавычки. |
/raweh |
Отображает предложения обработки исключений в исходном виде. |
/source |
Выводит первоначальные строки исходного кода в виде комментариев. |
/tokens |
Отображает лексемы метаданных классов и членов. |
/visibility:видимость[+видимость...] |
Дизассемблируются только типы и члены с заданной областью видимости. Допустимы следующие значения аргумента область_видимости: PUB — открытые PRI — закрытые FAM — семейство ASM — сборка FAA — семейство и сборка FOA — семейство или сборка PSC — закрытая область Определения этих модификаторов области видимости см. в объектах MethodAttributes и TypeAttributes. |
Приведенные ниже параметры допустимы для файлов EXE и DLL при выводе в файл или на консоль.
Параметр |
Описание |
---|---|
/all |
Задает сочетание параметров /header, /bytes, /stats, /classlist и /tokens.
Примечание
В версиях 1.0 и 1.1 платформы .NET Framework задает сочетание параметров /header, /bytes и /tokens.
|
/classlist |
Содержит список классов, определенных в этом модуле. Новые возможности .NET Framework версии 2.0 |
/forward |
Используется прямое объявление класса. Новые возможности .NET Framework версии 2.0 |
/headers |
Включает сведения из заголовка файла в выходной файл. |
/item:класс[::член[(сигнатура]] |
В зависимости от заданных аргументов выполняется дизассемблирование следующих объектов:
|
/noil |
Подавляет вывод кода сборки MSIL. |
/stats |
Включает в образ статистику. Новые возможности .NET Framework версии 2.0 |
/typelist |
Создает полный список типов, чтобы сохранить расположение типов в круговом пути. Новые возможности .NET Framework версии 2.0 |
/unicode |
Выходные данные будут находиться в Юникоде. |
/utf8 |
Выходные данные будут иметь кодировку UTF-8. Значение по умолчанию — ANSI. |
Приведенные ниже параметры допустимы для файлов EXE, OBJ и LIB только при выводе в файл или на консоль.
Параметр |
Описание |
---|---|
/metadata[=specifier] |
Указывает, что должны выводиться метаданные, при этом параметр specifier может иметь следующие значения: MDHEADER — в метаданных должны отображаться сведения о заголовке и размерах. HEX — сведения должны быть представлены как в текстовом, так и в шестнадцатеричном форматах. CSV — должны выводиться количество записей и размеры кучи. UNREX — должны выводиться неразрешенные внешние ссылки. SCHEMA — должны выводиться заголовок метаданных и данные схемы. RAW — должны выводиться таблицы необработанных метаданных. HEAPS — должны выводиться необработанные данные кучи. VALIDATE — должна выполняться проверка согласованности метаданных. Параметр /metadata можно задать несколько раз с различными значениями параметра specifier. Новые возможности .NET Framework версии 2.0 |
Приведенные ниже параметры допустимы для файлов LIB при выводе в файл или на консоль.
Параметр |
Описание |
---|---|
/objectfile=filename |
Вывод метаданных отдельного файла объекта из заданной библиотеки. Новые возможности .NET Framework версии 2.0 |
Примечание |
---|
Все параметры программы Ildasm.exe не учитывают регистр и распознаются по первым трем буквам.Например, команда /quo эквивалентна команде /quoteallnames.Разделителем параметра и его аргумента может служить двоеточие (:) или знак равенства (=).Например, команда /output:имя_файла эквивалентна команде /output=имя_файла. |
Заметки
Программа Ildasm.exe работает только с PE-файлами, расположенными на жестком диске. Программа не обрабатывает файлы, установленные в глобальный кэш сборок.
Текстовый файл, созданный программой Ildasm.exe, можно передать на вход ассемблера MSIL (Ilasm.exe). Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения. После компиляции кода и обработки результатов с помощью Ildasm.exe можно вручную добавить недостающие атрибуты в полученный текстовый файл MSIL. Чтобы создать окончательный исполняемый файл, следует обработать этот текстовый файл программой Ilasm.exe.
Примечание |
---|
На данный момент эта технология не может быть применена к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++). |
Для просмотра метаданных и дизассемблированного кода PE-файлов в режиме дерева иерархии применяется графический интерфейс пользователя дизассемблера MSIL. Чтобы запустить графический интерфейс пользователя, введите команду ildasm в командной строке без аргумента имя_PE-файла и без параметров. В меню Файл можно перейти к PE-файлу, который требуется загрузить в программу Ildasm.exe. Чтобы сохранить метаданные и дизассемблированный код, отображаемый для выбранного PE-файла, выберите в меню Файл команду Дамп. Чтобы сохранить только иерархическое отображение дерева, выберите в меню Файл команду Дамп дерева. Дополнительные инструкции по загрузке файла в программу Ildasm.exe и интерпретации результатов см. в учебнике по Ildasm.exe, расположенном в папке Samples, входящей в комплект поставки Пакет средств разработки программного обеспечения (SDK) для Windows.
Если для программы Ildasm.exe задан аргумент имя_PE-файла, содержащий внедренные ресурсы, будет создано несколько выходных файлов: текстовый файл с MSIL-кодом и RESOURCES-файлы, имена которых извлекаются из имен ресурсов, указанных в метаданных (по одному файлу на каждый внедренный управляемый ресурс). Если в аргумент имя_PE-файла внедрены неуправляемые ресурсы, будет создан RES-файл /res с именем, указанным в параметре /output для выходного MSIL-кода.
Примечание |
---|
Для входных файлов OBJ и LIB программа Ildasm.exe отображает только описания метаданных.MSIL-код для файлов этих типов не дизассемблируется. |
Чтобы определить, управляем ли файл EXE или DLL, обработайте его программой Ildasm.exe. Если файл не является управляемым, будет выдано сообщение о том, что у файла отсутствует заголовок общеязыковой среды выполнения и он не может быть дизассемблирован. Если файл является управляемым, программа будет выполнена без ошибок.
Примеры
Приведенная ниже команда выводит метаданные и дизассемблированный код PE-файла MyHello.exe в стандартном графическом интерфейсе пользователя программы Ildasm.exe.
ildasm myHello.exe
Приведенная ниже команда дизассемблирует файл MyFile.exe и сохраняет выходной текст для ассемблера MSIL в файле MyFile.il.
ildasm MyFile.exe /output:MyFile.il
Приведенная ниже команда дизассемблирует файл MyFile.exe и выводит выходной текст для ассемблера MSIL на консоль.
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
Примечание |
---|
В версиях 1.0 и 1.1 платформы .NET Framework открывающей скобке, которая следует за именем метода, должна соответствовать закрывающая скобка после подписи: 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.
См. также
Ссылки
Командная строка Visual Studio и пакета Windows SDK
Основные понятия
Процесс управляемого выполнения
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Апрель 2011 |
Добавлены сведения об использовании командных строк Visual Studio и Windows SDK. |
Улучшение информации. |