Ildasm.exe (IL Desmontador)
O IL Disassembler é uma ferramenta complementar ao IL Assembler (Ilasm.exe). Ildasm.exe pega um arquivo executável portátil (PE) que contém código de linguagem intermediária (IL) e cria um arquivo de texto adequado como entrada para Ilasm.exe.
Esta ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, use o Visual Studio Developer Command Prompt ou o Visual Studio Developer PowerShell.
Na linha de comandos, escreva o seguinte:
Sintaxe
ildasm [options] [PEfilename] [options]
Parâmetros
As opções a seguir estão disponíveis para arquivos .exe, .dll, .obj, .lib e .winmd .
Opção | Description |
---|---|
/out= filename |
Cria um arquivo de saída com o especificado filename , em vez de exibir os resultados em uma interface gráfica do usuário. |
/rtf | Produz saída em formato rich text. Inválido com a opção /text . |
/Texto | Exibe os resultados na janela do console, em vez de em uma interface gráfica do usuário ou como um arquivo de saída. |
/html | Produz saída em formato HTML. Válido apenas com a opção /output . |
/? | Exibe a sintaxe do comando e as opções da ferramenta. |
As seguintes opções adicionais estão disponíveis para arquivos .exe, .dll e .winmd .
Opção | Description |
---|---|
/bytes | Mostra bytes reais, em formato hexadecimal, como comentários de instrução. |
/caverbal | Produz blobs de atributos personalizados na forma verbal. O padrão é a forma binária. |
/linenum | Inclui referências a linhas de origem originais. |
/nobar | Suprime a janela pop-up do indicador de progresso da desmontagem. |
/NOCA | Suprime a saída de atributos personalizados. |
/projeto | Exibe metadados da maneira como aparecem para o código gerenciado, em vez da maneira como aparecem no Tempo de Execução do Windows nativo. Se PEfilename não for um ficheiro de metadados do Windows (.winmd), esta opção não tem efeito. Consulte Suporte do .NET Framework para aplicativos da Windows Store e Tempo de Execução do Windows. |
/pubonly | Desmonta apenas tipos e membros públicos. Equivalente a /visibility:PUB. |
/quoteallnames | Inclui todos os nomes entre aspas simples. |
/raweh | Mostra cláusulas de tratamento de exceção em formato bruto. |
/fonte | Mostra as linhas de origem originais como comentários. |
/tokens | Mostra tokens de metadados de classes e membros. |
/visibilidade: vis [+vis ...] |
Desmonta apenas tipos ou membros com a visibilidade especificada. Os seguintes valores são válidos para vis :PUB — Público PRI — Privado FAM — Família ASM — Montagem FAA — Família e Assembleia FOA — Família ou Assembleia CPS — Âmbito privado Para obter definições desses modificadores de visibilidade, consulte MethodAttributes e TypeAttributes. |
As opções a seguir são válidas para arquivos .exe, .dll e .winmd somente para saída de arquivo ou console.
Opção | Description |
---|---|
/todos | Especifica uma combinação das opções /header, /bytes, /stats, /classlist e /tokens. |
/lista de classes | Inclui uma lista de classes definidas no módulo. |
/para a frente | Usa a declaração de classe de encaminhamento. |
/cabeçalhos | Inclui informações de cabeçalho de arquivo na saída. |
/artigo: class [:: member [(sig ]] |
Desmonta o seguinte dependendo do argumento fornecido: - Desmonta o especificado class .- Desmonta o especificado member do class .- Desmonta o member class do com a assinatura sig especificada. O formato do sig é:[ instance ] returnType (parameterType1 , parameterType2 , ..., parameterTypeN )Observação No .NET Framework versões 1.0 e 1.1, sig deve ser seguido por um parêntese de fechamento: (sig) . A partir do Net Framework 2.0, o parêntese de fechamento deve ser omitido: (sig . |
/noil | Suprime a saída do código de assembly IL. |
/estatísticas | Inclui estatísticas sobre a imagem. |
/typelist | Produz a lista completa de tipos, para preservar a ordenação de tipos em uma viagem de ida e volta. |
/unicode | Usa codificação Unicode para a saída. |
/utf8 | Usa codificação UTF-8 para a saída. ANSI é o padrão. |
As opções a seguir são válidas para arquivos .exe, .dll, .obj, .lib e .winmd somente para saída de arquivo ou console.
Opção | Description |
---|---|
/metadados[=specifier ] |
Mostra metadados, onde specifier está:MDHEADER — Mostra as informações e os tamanhos do cabeçalho dos metadados. HEX — Mostrar informações em hexadecimal, bem como em palavras. CSV — Mostra as contagens de registros e os tamanhos de heap. UNREX — Mostrar externos não resolvidos. SCHEMA — Mostrar o cabeçalho dos metadados e as informações do esquema. RAW — Mostrar as tabelas de metadados brutos. HEAPS — Mostre as pilhas brutas. VALIDAR — Valide a consistência dos metadados. Você pode especificar /metadata várias vezes, com valores diferentes para specifier . |
As opções a seguir são válidas apenas para arquivos .lib para saída de arquivo ou console.
Opção | Description |
---|---|
/objectfile=filename |
Mostra os metadados de um único arquivo de objeto na biblioteca especificada. |
Nota
Todas as opções para Ildasm.exe não diferenciam maiúsculas de minúsculas e são reconhecidas pelas três primeiras letras. Por exemplo, /quo é equivalente a /quoteallnames. As opções que especificam argumentos aceitam dois pontos (:) ou um sinal de igual (=) como separador entre a opção e o argumento. Por exemplo, /output: filename é equivalente a /output= filename.
Observações
Ildasm.exe só opera em arquivos PE no disco. Ele não opera em arquivos instalados no cache de assembly global.
O arquivo de texto produzido por Ildasm.exe pode ser usado como entrada para o IL Assembler (Ilasm.exe). Isso é útil, por exemplo, ao compilar código em uma linguagem de programação que não suporta todos os atributos de metadados de tempo de execução. Depois de compilar o código e executar sua saída através Ildasm.exe, o arquivo de texto IL resultante pode ser editado manualmente para adicionar os atributos ausentes. Em seguida, você pode executar esse arquivo de texto através do IL Assembler para produzir um arquivo executável final.
Nota
Atualmente, você não pode usar essa técnica com arquivos PE que contêm código nativo incorporado (por exemplo, arquivos PE produzidos pelo Visual C++).
Você pode 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. Para usar a GUI, digite ildasm na linha de comando sem fornecer o argumento PEfilename ou quaisquer opções. No menu Arquivo , você pode navegar até o arquivo PE que deseja carregar no Ildasm.exe. Para salvar os metadados e o código desmontado exibidos para o PE selecionado, selecione o comando Despejar no menu Arquivo. Para salvar somente a exibição de árvore hierárquica, selecione o comando Dump Treeview no menu Arquivo . Para obter um guia detalhado sobre como carregar um arquivo no Ildasm.exe e interpretar a saída, consulte o Tutorial de Ildasm.exe , localizado na pasta Exemplos que acompanha o SDK do Windows.
Se você fornecer a Ildasm.exe um argumento PEfilename que contenha recursos incorporados, a ferramenta produzirá vários arquivos de saída: um arquivo de texto que contém código IL e, para cada recurso gerenciado incorporado, um arquivo .resources produzido usando o nome do recurso a partir de metadados. Se um recurso não gerenciado estiver incorporado em PEfilename, um arquivo .res será produzido usando o nome de arquivo especificado para saída IL pela opção /output .
Nota
Ildasm.exe mostra apenas descrições de metadados para arquivos de entrada .obj e .lib. O código IL para esses tipos de arquivo não é desmontado.
Você pode executar Ildasm.exe sobre an.exe ou .dll arquivo para determinar se o arquivo é gerenciado. 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. Se o arquivo for gerenciado, a ferramenta será executada com êxito.
Informações sobre a Versão
A partir do .NET Framework 4.5, Ildasm.exe manipula um BLOB marshal não reconhecido (objeto binário grande) exibindo o conteúdo binário bruto. Por exemplo, o código a seguir mostra como um BLOB marshal gerado por um programa C# é exibido:
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
A partir do .NET Framework 4.5, Ildasm.exe exibe atributos que são aplicados a implementações de interface, conforme mostrado no seguinte trecho de Ildasm.exe saída:
.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 )
…
Exemplos
O comando a seguir faz com que os metadados e o código desmontado do arquivo MyHello.exe
PE sejam exibidos na GUI padrão do Ildasm.exe .
ildasm myHello.exe
O comando a seguir desmonta o arquivo MyFile.exe
e armazena o texto resultante do IL Assembler na MyFile.il do arquivo.
ildasm MyFile.exe /output:MyFile.il
O comando a seguir desmonta o arquivo MyFile.exe
e exibe o texto resultante do IL Assembler na janela do console.
ildasm MyFile.exe /text
Se o arquivo MyApp.exe
contiver recursos gerenciados e não gerenciados incorporados, o comando a seguir produzirá quatro arquivos: MyApp.il, MyApp.res, Icons.resources e Message.resources:
ildasm MyApp.exe /output:MyApp.il
O comando a seguir desmonta o método MyMethod
dentro da classe MyClass
in MyFile.exe
e exibe a saída para a janela do console.
ildasm /item:MyClass::MyMethod MyFile.exe /text
No exemplo anterior, poderia haver vários métodos nomeados MyMethod
com assinaturas diferentes. O comando a seguir desmonta o método MyMethod
de instância com o tipo de retorno de void e os tipos de parâmetro int32 e string.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Nota
No .NET Framework versões 1.0 e 1.1, o parêntese esquerdo que segue o nome do método deve ser balanceado por um parêntese direito após a assinatura: MyMethod(instance void(int32))
. A partir do .NET Framework 2.0, o parêntese de fechamento deve ser omitido: MyMethod(instance void(int32)
.
Para recuperar um static
método (Shared
método no Visual Basic), omita a palavra-chave instance
. Tipos de classe que não são tipos primitivos como int32
e string
devem incluir o namespace e devem ser precedidos pela palavra-chave class
. Os tipos externos devem ser precedidos pelo nome da biblioteca entre colchetes. O comando a seguir desmonta um método estático chamado MyMethod
que tem um parâmetro do tipo AppDomain e tem um tipo de retorno de 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 para frente. Por exemplo, se a MyNamespace.MyClass
classe contiver uma classe aninhada chamada NestedClass
, a classe aninhada será identificada da seguinte forma: class MyNamespace.MyClass/NestedClass
.