Ildasm.exe (IL Disassembler)Ildasm.exe (IL Disassembler)

O IL Disassembler é uma ferramenta complementar ao IL Assembler (Ilasm.exe).The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). O Ildasm.exe usa um arquivo PE que contém o código IL (linguagem intermediária) e cria um arquivo de texto adequado como entrada para 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.

Essa ferramenta é instalada automaticamente com o Visual Studio.This tool is automatically installed with Visual Studio. Para executar a ferramenta, use o Prompt de Comando do Desenvolvedor (ou o Prompt de Comando do Visual Studio no Windows 7).To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Para obter mais informações, consulte Prompts de Comando.For more information, see Command Prompts.

No prompt de comando, digite o seguinte:At the command prompt, type the following:

SintaxeSyntax

ildasm [options] [PEfilename] [options]

ParâmetrosParameters

As opções a seguir estão disponíveis para arquivos .exe, .dll, .obj, .lib e .winmd.The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

OpçãoOption DescriçãoDescription
/out= filename/out= filename Cria um arquivo de saída com o filename especificado, em vez de exibir os resultados em uma interface gráfica do usuário.Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf Produz saída em formato rich text.Produces output in rich text format. Inválido com a opção /text.Invalid with the /text option.
/text/text Exibe os resultados na janela de console, e não em uma interface gráfica do usuário ou como um arquivo de saída.Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html Produz saída em formato HTML.Produces output in HTML format. Válido apenas com a opção /output.Valid with the /output option only.
/?/? Exibe a sintaxe de comando e as opções para a ferramenta.Displays the command syntax and options for the tool.

As opções adicionais a seguir estão disponíveis para arquivos .exe, .dll e .winmd.The following additional options are available for .exe, .dll, and .winmd files.

OpçãoOption DescriçãoDescription
/bytes/bytes Mostra bytes reais, em formato hexadecimal, como comentários de instrução.Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal Produz blobs de atributo personalizado em forma verbal.Produces custom attribute blobs in verbal form. O padrão é a forma binária.The default is binary form.
/linenum/linenum Inclua referências para linhas de origem.Includes references to original source lines.
/nobar/nobar Suprime a janela pop-up do indicador de andamento da desmontagem.Suppresses the disassembly progress indicator pop-up window.
/noca/noca Suprime a saída de atributos personalizados.Suppresses the output of custom attributes.
/project/project Exibe metadados da maneira como são exibidos para o código gerenciado, e não da maneira como são exibidos no Tempo de Execução do WindowsWindows Runtime nativo.Displays metadata the way it appears to managed code, instead of the way it appears in the native Tempo de Execução do WindowsWindows Runtime. Se PEfilename não for um arquivo de metadados do Windows (.winmd), esta opção não terá nenhum efeito.If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. Consulte Suporte do .NET Framework para aplicativos da Windows Store e Windows Runtime.See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly Desmonta apenas tipos e membros públicos.Disassembles only public types and members. Equivalente a /visibility:PUB.Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames Inclui todos os nomes entre aspas simples.Includes all names in single quotes.
/raweh/raweh Mostra cláusulas de tratamento de exceções na forma bruta.Shows exception handling clauses in raw form.
/source/source Mostra linhas de origem como comentários.Shows original source lines as comments.
/tokens/tokens Mostra tokens de metadados de classes e membros.Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] Desmonta apenas tipos ou membros com a visibilidade especificada.Disassembles only types or members with the specified visibility. A seguir estão os valores válidos para vis:The following are valid values for vis:

PUB — PúblicoPUB — Public

PRI — PrivadoPRI — Private

FAM — FamíliaFAM — Family

ASM — AssemblyASM — Assembly

FAA — Família e AssemblyFAA — Family and Assembly

FOA — Família ou AssemblyFOA — Family or Assembly

PSC — Escopo PrivadoPSC — Private Scope

Para definições desses modificadores de visibilidade, consulte MethodAttributes e TypeAttributes.For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

As opções a seguir são válidas para arquivos .exe, .dll e .winmd apenas para saída de arquivo ou de console.The following options are valid for .exe, .dll, and .winmd files for file or console output only.

OpçãoOption DescriçãoDescription
/all/all Especifica uma combinação das opções /header, /bytes, /stats, /classlist e /tokens.Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist Inclui uma lista de classes definidas no módulo.Includes a list of classes defined in the module.
/forward/forward Usa declaração da classe de encaminhamento.Uses forward class declaration.
/headers/headers Inclui informações de cabeçalho do arquivo na saída.Includes file header information in the output.
/item: class[:: member[(sig]]/item: class[:: member[(sig]] Desmonta o seguinte, dependendo do argumento fornecido:Disassembles the following depending upon the argument supplied:

– Desmonta o class especificado.- Disassembles the specified class.
– Desmonta o member especificado da class.- Disassembles the specified member of the class.
– Desmonta o member da class com a assinatura especificada sig.- Disassembles the member of the class with the specified signature sig. O formato de sig é:The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Observação No .NET Framework versões 1.0 e 1.1, sig deve ser seguido de um parêntese de fechamento: (sig).Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). Desde o Net Framework 2.0, o parêntese de fechamento deve ser omitido: (sig.Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil Suprime saída de código do assembly IL.Suppresses IL assembly code output.
/stats/stats Inclui estatísticas na imagem.Includes statistics on the image.
/typelist/typelist Produz a lista completa de tipos, para preservar a ordenação de tipos em uma viagem de ida e volta.Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode Usa codificação Unicode para a saída.Uses Unicode encoding for the output.
/utf8/utf8 Usa codificação UTF-8 para a saída.Uses UTF-8 encoding for the output. ANSI é o padrão.ANSI is the default.

As opções a seguir são válidas para arquivos .exe, .dll, .obj, .lib e .winmd apenas para saída de arquivo ou de console.The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

OpçãoOption DescriçãoDescription
/metadata[=specifier]/metadata[=specifier] Mostra metadados, em que specifier é:Shows metadata, where specifier is:

MDHEADER — Mostra as informações de cabeçalho dos metadados e os tamanhos.MDHEADER — Show the metadata header information and sizes.

HEX — Mostra informações em hexadecimal, bem como em palavras.HEX — Show information in hex as well as in words.

CSV — Mostra as contagens de registros e os tamanhos de heap.CSV — Show the record counts and heap sizes.

UNREX — Mostra externos não resolvidos.UNREX — Show unresolved externals.

SCHEMA — Mostra as informações de cabeçalho dos metadados e de esquema.SCHEMA — Show the metadata header and schema information.

RAW — Mostra as tabelas de metadados brutos.RAW — Show the raw metadata tables.

HEAPS — Mostra os heaps brutos.HEAPS — Show the raw heaps.

VALIDATE — Valida a consistência dos metadados.VALIDATE — Validate the consistency of the metadata.

É possível especificar /metadata várias vezes, com valores diferentes para specifier.You can specify /metadata multiple times, with different values for specifier.

As opções a seguir são válidas para arquivos .lib apenas para saída de arquivo ou de console.The following options are valid for .lib files for file or console output only.

OpçãoOption DescriçãoDescription
/objectfile=filename/objectfile=filename Mostre os metadados de um único arquivo de objeto na biblioteca especificada.Shows the metadata of a single object file in the specified library.

Observação

Todas as opções de Ildasm.exe não diferenciam maiúsculas de minúsculas e são reconhecidas pelas três primeiras letras.All options for Ildasm.exe are case-insensitive and recognized by the first three letters. Por exemplo, /quo é equivalente a /quoteallnames.For example, /quo is equivalent to /quoteallnames. As opções que especificam argumentos aceitam dois-pontos (:) ou um sinal de igualdade (=) como o separador entre a opção e o argumento.Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. Por exemplo, /output: filename é equivalente a /output= filename.For example, /output: filename is equivalent to /output= filename.

ComentáriosRemarks

Ildasm.exe funciona apenas em arquivos PE no disco.Ildasm.exe only operates on PE files on disk. Ele não funciona em arquivos instalados no cache de assembly global.It does not operate on files installed in the global assembly cache.

O arquivo de texto produzido por Ildasm.exe pode ser usado como entrada para o IL Assembler (Ilasm.exe).The text file produced by Ildasm.exe can be used as input to the IL Assembler (Ilasm.exe). Isso é útil, por exemplo, durante a compilação do código em uma linguagem de programação que não dá suporte a todos os atributos de metadados do tempo de execução.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Depois de compilar o código e executar sua saída por meio de Ildasm.exe, o arquivo de texto IL resultante poderá ser editado manualmente para adicionar os atributos ausentes.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. Em seguida, é possível executar esse arquivo de texto por meio do IL Assembler para produzir um arquivo executável final.You can then run this text file through the IL Assembler to produce a final executable file.

Observação

Atualmente, não é possível usar essa técnica com arquivos PE que contenham código nativo inserido (por exemplo, arquivos PE produzidos por Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

É possível usar a GUI padrão no IL Disassembler para exibir os metadados e o código desmontado de qualquer arquivo PE existente em uma exibição de árvore hierárquica.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. Para usar a GUI, digite ildasm na linha de comando sem fornecer o argumento PEfilename ou nenhuma opção.To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. No menu Arquivo, é possível navegar até o arquivo PE que você deseja carregar em Ildasm.exe.From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. Para salvar os metadados e o código desmontado exibido para o PE selecionado, selecione o comando Despejo no menu Arquivo.To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. Para salvar apenas o modo de exibição de árvore hierárquica, selecione o comando Despejar Modo de Exibição de Árvore no menu Arquivo.To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Para obter um guia detalhado para carregar um arquivo em Ildasm.exe e interpretar a saída, consulte o Tutorial de Ildasm.exe, localizado na pasta Exemplos que acompanha o Windows Software Development Kit (SDK)Windows 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 Software Development Kit (SDK)Windows Software Development Kit (SDK).

Se você fornecer o Ildasm.exe com um argumento PEfilename que contenha recursos inseridos, a ferramenta produzirá vários arquivos de saída: um arquivo de texto contendo o código IL e, para cada recurso gerenciado inserido, um arquivo .resources produzido usando o nome do recurso dos metadados.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. Se um recurso não gerenciado for inserido em PEfilename, um arquivo .res será produzido usando o nome de arquivo especificado para a saída IL pela opção /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.

Observação

Ildasm.exe mostra apenas descrições de metadados para arquivos de entrada .obj e .lib.Ildasm.exe shows only metadata descriptions for .obj and .lib input files. O código IL desses tipos de arquivo não é desmontado.IL code for these file types is not disassembled.

É possível executar Ildasm.exe em um arquivo .exe ou .dll para determinar se o arquivo é gerenciado.You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. Se o arquivo não for gerenciado, a ferramenta exibirá uma mensagem informando que o arquivo não tem cabeçalho de Common Language Runtime válido e não pode ser desmontado.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. Se o arquivo for gerenciado, a ferramenta será executada com êxito.If the file is managed, the tool runs successfully.

Informações de versãoVersion Information

Desde o .NET Framework 4.5.NET Framework 4.5, o Ildasm.exe identifica um BLOB (objeto binário grande) de marshal não reconhecido exibindo o conteúdo binário bruto.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. Por exemplo, o código a seguir mostra como um BLOB de marshaling gerado por um programa C# é exibido: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

Desde o .NET Framework 4.5.NET Framework 4.5, o Ildasm.exe exibe atributos aplicados a implementações de interface, conforme é mostrado no seguinte trecho da saída de 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 )
      …

ExemplosExamples

O comando a seguir faz os metadados e o código desmontado do arquivo PE MyHello.exe serem exibidos na GUI padrão do 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

O comando a seguir desmonta o arquivo MyFile.exe e armazena o texto do IL Assembler resultante no arquivo 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

O comando a seguir desmonta o arquivo MyFile.exe e exibe o texto do IL Assembler resultante na janela do console.The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

Se o arquivo MyApp.exe contiver recursos gerenciados não gerenciados inseridos, o comando a seguir produzirá quatro arquivos: MyApp.il, MyApp.res, Icons.resources e 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

O comando a seguir desmonta o método MyMethod dentro da classe MyClass em MyFile.exe e exibe a saída na janela do console.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

No exemplo anterior, talvez haja vários métodos chamados MyMethod com assinaturas diferentes.In the previous example, there could be several methods named MyMethod with different signatures. O comando a seguir desmonta o método de instância MyMethod com o tipo de retorno de void e os tipos de parâmetro int32 e 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

Observação

No .NET Framework versões 1.0 e 1.1, o parêntese à esquerda que segue o nome do método deve ser acompanhado de um parêntese à direita após a assinatura: 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)). Desde o .NET Framework 2.0, o parêntese de fechamento deve ser omitido: MyMethod(instance void(int32).Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

Para recuperar um método static (método Shared no Visual Basic), omita a palavra-chave instance.To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. Tipos de classe que não são tipos primitivos como int32 e string devem incluir o namespace e ser precedidos pela palavra-chave class.Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. Os tipos externos devem ser precedidos pelo nome da biblioteca entre colchetes.External types must be preceded by the library name in square brackets. O comando a seguir desmonta um método estático chamado MyMethod que tem um parâmetro de tipo AppDomain e tem um tipo de retorno de 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

Um tipo aninhado deve ser precedido por sua classe de contenção, delimitada por uma barra.A nested type must be preceded by its containing class, delimited by a forward slash. Por exemplo, se a classe MyNamespace.MyClass contiver uma classe aninhada chamada NestedClass, a classe aninhada será identificada da seguinte forma: 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.

Consulte tambémSee also

FerramentasTools
Ilasm.exe (IL Assembler)Ilasm.exe (IL Assembler)
Processo de execução gerenciadaManaged Execution Process
Prompts de ComandoCommand Prompts