Дизассемблер MSIL (Ildasm.exe)

Обновлен: Ноябрь 2007

Дизассемблер MSIL является парным инструментом к ассемблеру MSIL (Ilasm.exe). Ildasm.exe принимает входной исполняемый файл (PE-файл), содержащий код на языке MSIL, и создает на его основе текстовый файл, который может служить входным для программы Ilasm.exe.

ildasm [options] [PEfilename] [options]

Параметры

Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ и LIB.

Параметр

Описание

/output=имя_файла

Создает выходной файл с заданным именем_файла вместо вывода результатов в графическом интерфейсе пользователя.

/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.

f7dy01k1.alert_note(ru-ru,VS.90).gifПримечание.
В версиях 1.0 и 1.1 платформы .NET Framework задает сочетание параметров /header, /bytes и /tokens.

/classlist

Содержит список классов, определенных в этом модуле.

Новые возможности .NET Framework версии 2.0

/forward

Используется прямое объявление класса.

Новые возможности .NET Framework версии 2.0

/header

Включает сведения из заголовка файла в выходной файл.

/item:класс[::член[(подпись]]

В зависимости от заданных аргументов выполняется дизассемблирование следующих объектов:

  • Дизассемблируется указанный класс.

  • Дизассемблируется указанный member этого класса.

  • Дизассемблируется memberкласса с заданной подписью подпись. Аргумент подпись имеет следующий формат:

    [instance] returnType(parameterType1, parameterType2, …, parameterTypeN)

    Примечание В платформе .NET Framework версий 1.0 и 1.1 за атрибутом sig должна следовать закрывающая скобка: (sig). В версии 2.0 закрывающая скобка должна быть опущена: (sig.

/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

f7dy01k1.alert_note(ru-ru,VS.90).gifПримечание.

Все параметры программы Ildasm.exe не учитывают регистр и распознаются по первым трем буквам. Например, команда /quo эквивалентна команде /quoteallnames. Разделителем параметра и его аргумента может служить двоеточие (:) или знак равенства (=). Например, команда /output:имя_файла эквивалентна команде /output=имя_файла.

Заметки

Программа Ildasm.exe работает только с PE-файлами, расположенными на жестком диске. Программа не обрабатывает файлы, установленные в глобальный кэш сборок.

Текстовый файл, созданный программой Ildasm.exe, можно передать на вход ассемблера MSIL (Ilasm.exe). Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения. После компиляции кода и обработки результатов с помощью Ildasm.exe можно вручную добавить недостающие атрибуты в полученный текстовый файл MSIL. Чтобы создать окончательный исполняемый файл, следует обработать этот текстовый файл программой Ilasm.exe.

f7dy01k1.alert_note(ru-ru,VS.90).gifПримечание.

На данный момент эта технология не может быть применена к 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-кода.

f7dy01k1.alert_note(ru-ru,VS.90).gifПримечание.

Для входных файлов 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
f7dy01k1.alert_note(ru-ru,VS.90).gifПримечание.

В версиях 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.

См. также

Основные понятия

Компиляция в MSIL

Ссылки

Инструменты .NET Framework

Ассемблер MSIL (Ilasm.exe)

Командная строка пакета SDK