Ildasm.exe (дизассемблер IL)Ildasm.exe (IL Disassembler)

Дизассемблер IL является сопутствующим инструментом ассемблера IL (Ilasm.exe).The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). Ildasm.exe принимает переносимый исполняемый файл (PE-файл), содержащий код на промежуточном языке (IL), и создает на его основе текстовый файл, который может служить входным файлом для Ilasm.exe.Ildasm.exe takes a portable executable (PE) file that contains intermediate language (IL) code and creates a text file suitable as input to Ilasm.exe.

Эта программа автоматически устанавливается вместе с Visual Studio.This tool is automatically installed with Visual Studio. Чтобы применить этот инструмент, воспользуйтесь командной строкой разработчика (или командной строкой Visual Studio в Windows 7).To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Дополнительные сведения см. в разделе Командные строки.For more information, see Command Prompts.

В командной строке введите следующее.At the command prompt, type the following:

СинтаксисSyntax

ildasm [options] [PEfilename] [options]

ПараметрыParameters

Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD.The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

ПараметрOption Описание:Description
/out= filename/out= filename Создает выходной файл с заданным параметром filename вместо вывода результатов в графический пользовательский интерфейс.Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf Выводит данные в формате RTF.Produces output in rich text format. Не может использоваться с параметром /text.Invalid with the /text option.
/text/text Отображает результаты в окне консоли вместо вывода в графический пользовательский интерфейс или выходной файл.Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html Выводит данные в формате HTML.Produces output in HTML format. Может использоваться только с параметром /output.Valid with the /output option only.
/?/? Отображает синтаксис команд и параметров для средства.Displays the command syntax and options for the tool.

Перечисленные ниже дополнительные параметры допустимы для файлов EXE, DLL и WINMD.The following additional options are available for .exe, .dll, and .winmd files.

ПараметрOption Описание:Description
/bytes/bytes Отображает фактические байты в шестнадцатеричном формате в виде комментариев к инструкциям.Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal Создает большие двоичные объекты настраиваемых атрибутов в текстовом виде.Produces custom attribute blobs in verbal form. По умолчанию задана двоичная форма.The default is binary form.
/linenum/linenum Включает ссылки на строки исходного файла.Includes references to original source lines.
/nobar/nobar Подавляет вывод всплывающего окна с индикатором хода выполнения дизассемблирования.Suppresses the disassembly progress indicator pop-up window.
/noca/noca Подавляет вывод настраиваемых атрибутов.Suppresses the output of custom attributes.
/project/project Отображает метаданные в представлении для управляемого кода, вместо того как их представляет Среда выполнения WindowsWindows Runtime в машинном коде.Displays metadata the way it appears to managed code, instead of the way it appears in the native Среда выполнения WindowsWindows Runtime. Если параметр PEfilename не является файлом метаданных Windows (WINMD-файлом), этот параметр не учитывается.If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. См. раздел Поддержка приложений для Магазина Windows и среды выполнения Windows в .NET Framework.See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly Дизассемблирует только открытые типы и члены.Disassembles only public types and members. Эквивалентен /visibility:PUB.Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames Заключает все имена в одинарные кавычки.Includes all names in single quotes.
/raweh/raweh Отображает предложения обработки исключений в исходном виде.Shows exception handling clauses in raw form.
/source/source Отображает строки исходного кода в виде комментариев.Shows original source lines as comments.
/tokens/tokens Отображает токены метаданных классов и членов.Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] Дизассемблирует только типы и члены с заданной областью видимости.Disassembles only types or members with the specified visibility. Допустимы следующие значения аргумента vis:The following are valid values for vis:

PUB — открытый;PUB — Public

PRI — закрытый;PRI — Private

FAM — семейство;FAM — Family

ASM — сборка;ASM — Assembly

FAA — семейство и сборка;FAA — Family and Assembly

FOA — семейство или сборка;FOA — Family or Assembly

PSC — закрытая область.PSC — Private Scope

Определения модификаторов видимости см. в описании MethodAttributes и TypeAttributes.For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

Перечисленные ниже параметры допустимы для файлов EXE, DLL и WINMD только при выводе в файл или окно консоли.The following options are valid for .exe, .dll, and .winmd files for file or console output only.

ПараметрOption Описание:Description
/all/all Задает сочетание параметров /header, /bytes, /stats, /classlist и /tokens.Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist Включает список классов, определенных в этом модуле.Includes a list of classes defined in the module.
/forward/forward Использует прямое объявление класса.Uses forward class declaration.
/headers/headers Включает сведения заголовка файла в выходные данные.Includes file header information in the output.
/item: class[:: member[(sig]]/item: class[:: member[(sig]] В зависимости от заданных аргументов выполняет дизассемблирование:Disassembles the following depending upon the argument supplied:

дизассемблируется указанный class;- Disassembles the specified class.
дизассемблируется указанный член member этого класса class;- Disassembles the specified member of the class.
дизассемблируется член member класса class с указанной сигнатурой sig.- Disassembles the member of the class with the specified signature sig. Формат sig выглядит следующим образом:The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Примечание. В .NET Framework версий 1.0 и 1.1 за атрибутом sig должна следовать закрывающая скобка: (sig).Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). В .NET Framework 2.0 и более поздних версий закрывающая скобка должна быть опущена: (sig.Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil Подавляет вывод кода сборки IL.Suppresses IL assembly code output.
/stats/stats Включает статистику по образу.Includes statistics on the image.
/typelist/typelist Создает полный список типов, чтобы сохранить упорядочение типов в круговом пути.Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode Использует для выходных данных кодировку Юникод.Uses Unicode encoding for the output.
/utf8/utf8 Использует для выходных данных кодировку UTF-8.Uses UTF-8 encoding for the output. ANSI является значением по умолчанию.ANSI is the default.

Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD только при выводе в файл или окно консоли.The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

ПараметрOption Описание:Description
/metadata[=specifier]/metadata[=specifier] Отображает метаданные, при этом параметр specifier может принимать следующие значения:Shows metadata, where specifier is:

MDHEADER — показывать сведения и размеры заголовка метаданных;MDHEADER — Show the metadata header information and sizes.

HEX — показывать сведения в шестнадцатеричном и текстовом формате;HEX — Show information in hex as well as in words.

CSV — показывать количество записей и размеры кучи;CSV — Show the record counts and heap sizes.

UNREX — показывать неразрешенные внешние элементы;UNREX — Show unresolved externals.

SCHEMA — показывать сведения о заголовке и схеме метаданных;SCHEMA — Show the metadata header and schema information.

RAW — показывать необработанные таблицы метаданных;RAW — Show the raw metadata tables.

HEAPS — показывать необработанные кучи;HEAPS — Show the raw heaps.

VALIDATE — проверять согласованность метаданных.VALIDATE — Validate the consistency of the metadata.

Параметр /metadata можно задать несколько раз с различными значениями аргумента specifier.You can specify /metadata multiple times, with different values for specifier.

Перечисленные ниже параметры допустимы для LIB-файлов только при выводе в файл или окно консоли.The following options are valid for .lib files for file or console output only.

ПараметрOption Описание:Description
/objectfile=filename/objectfile=filename Вывод метаданных отдельного объектного файла из заданной библиотеки.Shows the metadata of a single object file in the specified library.

Примечание

Параметры программы Ildasm.exe не учитывают регистр и распознаются по первым трем буквам.All options for Ildasm.exe are case-insensitive and recognized by the first three letters. Например, команда /quo эквивалентна команде /quoteallnames.For example, /quo is equivalent to /quoteallnames. Разделителем параметра и его аргумента может служить двоеточие (:) или знак равенства (=).Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. Например, команда /output: filename эквивалентна команде /output= filename.For example, /output: filename is equivalent to /output= filename.

ПримечанияRemarks

Программа Ildasm.exe работает только с PE-файлами, расположенными на жестком диске.Ildasm.exe only operates on PE files on disk. Программа не обрабатывает файлы, установленные в глобальном кэше сборок.It does not operate on files installed in the global assembly cache.

Текстовый файл, созданный программой Ildasm.exe, можно передавать в качестве входных данных в ассемблер IL (Ilasm.exe).The text file produced by Ildasm.exe can be used as input to the IL Assembler (Ilasm.exe). Это полезно, к примеру, при компиляции кода на языке программирования, не поддерживающем все атрибуты метаданных среды выполнения.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. После компиляции кода и обработки результатов с помощью Ildasm.exe можно вручную добавить недостающие атрибуты в полученный текстовый файл IL.After compiling the code and running its output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. Чтобы создать окончательный исполняемый файл, следует обработать этот текстовый файл ассемблером IL.You can then run this text file through the IL Assembler to produce a final executable file.

Примечание

На данный момент такая технология не применяется к PE-файлам, содержащим встроенный машинный код (например, к PE-файлам, созданным компилятором Microsoft Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Для просмотра метаданных и дизассемблированного кода PE-файлов в иерархическом представлении в виде дерева применяется графический пользовательский интерфейс по умолчанию дизассемблера IL.You can use the default GUI in the IL Disassembler to view the metadata and disassembled code of any existing PE file in a hierarchical tree view. Чтобы запустить графический пользовательский интерфейс, введите в командной строке команду ildasm без аргумента имя_PE-файла и без параметров.To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. В меню Файл можно перейти к PE-файлу, который требуется загрузить в программу Ildasm.exe.From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. Чтобы сохранить метаданные и дизассемблированный код, отображаемый для выбранного PE-файла, выберите в меню Файл команду Дамп.To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. Чтобы сохранить только иерархическое представление в виде дерева, выберите в меню Файл команду Дерево дампа.To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Дополнительные инструкции по загрузке файла в программу Ildasm.exe и интерпретации выходных данных см. в учебнике по Ildasm.exe, расположенном в папке Samples, входящей в комплект поставки Windows SDKWindows Software Development Kit (SDK).For a detailed guide to loading a file into Ildasm.exe and interpreting the output, see the Ildasm.exe Tutorial, located in the Samples folder that ships with the Windows SDKWindows Software Development Kit (SDK).

Если программе Ildasm.exe задан аргумент имя_PE-файла, содержащий внедренные ресурсы, будет создано несколько выходных файлов: текстовый файл с IL-кодом и RESOURCES-файл для каждого внедренного управляемого ресурса (название файла соответствует названию ресурса в метаданных).If you provide Ildasm.exe with a PEfilename argument that contains embedded resources, the tool produces multiple output files: a text file that contains IL code and, for each embedded managed resource, a .resources file produced using the resource's name from metadata. Если в аргумент имя_PE-файла внедрены неуправляемые ресурсы, будет создан RES-файл с именем, указанным для IL-вывода в параметре /output.If an unmanaged resource is embedded in PEfilename, a .res file is produced using the filename specified for IL output by the /output option.

Примечание

Для входных файлов OBJ и LIB программа Ildasm.exe отображает только описания метаданных.Ildasm.exe shows only metadata descriptions for .obj and .lib input files. IL-код для файлов этих типов не дизассемблируется.IL code for these file types is not disassembled.

Чтобы определить, является ли файл EXE или DLL управляемым, обработайте его программой Ildasm.exe.You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. Если файл не является управляемым, программа выдаст сообщение, что у файла отсутствует допустимый заголовок среды CLR и он не может быть дизассемблирован.If the file is not managed, the tool displays a message stating that the file has no valid common language runtime header and cannot be disassembled. Если файл является управляемым, программа будет выполнена без ошибок.If the file is managed, the tool runs successfully.

Сведения о версииVersion Information

Начиная с .NET Framework 4.5.NET Framework 4.5 программа Ildasm.exe обрабатывает нераспознанный маршалинговый объект BLOB (большой двоичный объект), отображая необработанное двоичное содержимое.Starting with the .NET Framework 4.5.NET Framework 4.5, Ildasm.exe handles an unrecognized marshal BLOB (binary large object) by displaying the raw binary content. В следующем примере показано, как отображается маршалинговый объект BLOB, созданный программой C#:For example, the following code shows how a marshal BLOB generated by a C# program is displayed:

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.NET Framework 4.5 программа Ildasm.exe отображает атрибуты, применяемые к реализации интерфейса, как показано в следующем фрагменте выходных данных Ildasm.exe:Starting with the .NET Framework 4.5.NET Framework 4.5, Ildasm.exe displays attributes that are applied to interface implementations, as shown in the following excerpt from Ildasm.exe output:

.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 )
      …

ПримерыExamples

Следующая команда выводит метаданные и дизассемблированный код PE-файла MyHello.exe в стандартный графический пользовательский интерфейс программы Ildasm.exe.The following command causes the metadata and disassembled code for the PE file MyHello.exe to display in the Ildasm.exe default GUI.

ildasm myHello.exe

Следующая команда дизассемблирует файл MyFile.exe и сохраняет выходной текст ассемблера IL в файле MyFile.il.The following command disassembles the file MyFile.exe and stores the resulting IL Assembler text in the file MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Следующая команда дизассемблирует файл MyFile.exe и выводит выходной текст ассемблера IL в окно консоли.The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

Если файл MyApp.exe содержит внедренные управляемые и неуправляемые ресурсы, при выполнении следующей команды будет создано четыре файла: MyApp.il, MyApp.res, Icons.resources и Message.resources.If the file MyApp.exe contains embedded managed and unmanaged resources, the following command produces four files: MyApp.il, MyApp.res, Icons.resources, and Message.resources:

ildasm MyApp.exe /output:MyApp.il

Следующая команда дизассемблирует метод MyMethod класса MyClass в файле MyFile.exe и выводит результат в окно консоли.The following command disassembles the method MyMethod within the class MyClass in MyFile.exe and displays the output to the console window.

ildasm /item:MyClass::MyMethod MyFile.exe /text

В предыдущем примере допустимо наличие нескольких методов с именем MyMethod и различными сигнатурами.In the previous example, there could be several methods named MyMethod with different signatures. Следующая команда дизассемблирует метод экземпляра MyMethod с типом возвращаемого значения void и типами параметров int32 и string.The following command disassembles the instance method MyMethod with the return type of void and the parameter types int32 and string.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text

Примечание

В .NET Framework версии 1.0 и 1.1 открывающей скобке, которая следует за именем метода, должна соответствовать закрывающая скобка после сигнатуры: MyMethod(instance void(int32)).In the .NET Framework versions 1.0 and 1.1, the left parenthesis that follows the method name must be balanced by a right parenthesis after the signature: MyMethod(instance void(int32)). В .NET Framework 2.0 и более поздних версий закрывающая скобка должна быть опущена: MyMethod(instance void(int32).Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

Чтобы извлечь метод static (метод Shared в Visual Basic), следует опустить ключевое слово instance.To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. Типы классов, которые не являются простыми типами (такими как int32 и string), должны включать пространство имен и перед ними необходимо указывать ключевое слово class.Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. Перед внешними типами должно быть указано имя соответствующей библиотеки в квадратных скобках.External types must be preceded by the library name in square brackets. Следующая команда дизассемблирует статический метод с именем MyMethod, имеющий один параметр типа AppDomain, и возвращает значение типа AppDomain.The following command disassembles a static method named MyMethod that has one parameter of type AppDomain and has a return type of AppDomain.

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

Перед вложенным типом необходимо указывать содержащий его класс, отделенный косой чертой (/).A nested type must be preceded by its containing class, delimited by a forward slash. Например, если класс MyNamespace.MyClass содержит вложенный класс с именем NestedClass, вложенный класс указывается следующим образом: class MyNamespace.MyClass/NestedClass.For example, if the MyNamespace.MyClass class contains a nested class named NestedClass, the nested class is identified as follows: class MyNamespace.MyClass/NestedClass.

См. такжеSee also

ИнструментыTools
Ilasm.exe (ассемблер IL)Ilasm.exe (IL Assembler)
Процесс управляемого выполненияManaged Execution Process
Командные строкиCommand Prompts