Ildasm.exe (Il Disassembler)
O Il Disassembler é uma ferramenta complementar para o Assemblador IL (Ilasm.exe). Ildasm.exe utiliza um ficheiro executável portátil (PE) que contém código de idioma intermédio (IL) e cria um ficheiro de texto adequado como entrada para Ilasm.exe.
Esta ferramenta é instalada automaticamente com o Visual Studio. Para executar a ferramenta, utilize a Linha de Comandos do Programador do Visual Studio ou o PowerShell para Programadores do Visual Studio.
Na linha de comandos, escreva o seguinte:
Sintaxe
ildasm [options] [PEfilename] [options]
Parâmetros
As seguintes opções estão disponíveis para ficheiros.exe, .dll, .obj, .lib e .winmd .
Opção | Descrição |
---|---|
/out=filename |
Cria um ficheiro de saída com o especificado filename , em vez de apresentar os resultados numa interface gráfica. |
/rtf | Produz a saída em formato rtf. Inválido com a opção /text . |
/text | Apresenta os resultados na janela da consola, em vez de numa interface gráfica ou como um ficheiro de saída. |
/html | Produz a saída no formato HTML. Válido apenas com a opção /output . |
/? | Apresenta a sintaxe do comando e as opções da ferramenta. |
As seguintes opções adicionais estão disponíveis para os ficheiros .exe, .dlle .winmd .
Opção | Descrição |
---|---|
/bytes | Mostra bytes reais, em formato hexadecimal, como comentários de instruções. |
/caverbal | Produz blobs de atributos personalizados em formato verbal. A predefinição é o formulário binário. |
/linenum | Inclui referências a linhas de origem originais. |
/nobar | Suprime a janela de pop-up do indicador de progresso desmontado. |
/noca | Suprime a saída de atributos personalizados. |
/project | Apresenta metadados da forma como aparece no código gerido, em vez da forma como é apresentado no Windows Runtime nativo. Se PEfilename não for um ficheiro de metadados do Windows (.winmd), esta opção não tem qualquer efeito. Consulte .NET Framework Suporte para Aplicações e Windows Runtime da Loja Windows. |
/pubonly | Desmonta apenas os tipos e membros públicos. Equivalente a /visibility:PUB. |
/quoteallnames | Inclui todos os nomes entre plicas. |
/raweh | Mostra cláusulas de processamento de exceções na forma não processada. |
/source | Mostra as linhas de origem originais como comentários. |
/tokens | Mostra tokens de metadados de classes e membros. |
/visibility:vis [+vis ...] |
Desmonta apenas tipos ou membros com a visibilidade especificada. Seguem-se valores válidos para vis :PUB — Público PRI — Privado FAM — Família ASM – Assemblagem FAA — Família e Assemblagem FOA — Família ou Assemblagem PSC – Âmbito Privado Para obter definições destes modificadores de visibilidade, consulte MethodAttributes e TypeAttributes. |
As seguintes opções são válidas para ficheiros.exe, .dlle .winmd apenas para saídas de ficheiros ou consolas.
Opção | Descrição |
---|---|
/all | Especifica uma combinação das opções /header, /bytes, /stats, /classlist e /tokens . |
/classlist | Inclui uma lista de classes definidas no módulo. |
/forward | Utiliza a declaração de classe reencaminhada. |
/headers | Inclui informações de cabeçalho de ficheiro na saída. |
/item:class [::member [(sig ]] |
Desmonta o seguinte consoante o argumento fornecido: - Desmonta o especificado class .- Desmonta a especificação member de class .- Desmonta o member do class com a assinatura sig especificada . O formato de sig é:[ instance ] returnType (parameterType1 , parameterType2 , …, parameterTypeN )Nota No .NET Framework versões 1.0 e 1.1, sig tem de ser seguido de um parêntese de fecho: (sig) . A partir do Net Framework 2.0, o parêntese de fecho tem de ser omitido: (sig . |
/noil | Suprime a saída do código de assemblagem IL. |
/stats | Inclui estatísticas na imagem. |
/typelist | Produz a lista completa de tipos, para preservar a ordenação de tipos numa viagem de ida e volta. |
/unicode | Utiliza a codificação Unicode para a saída. |
/utf8 | Utiliza a codificação UTF-8 para a saída. ANSI é a predefinição. |
As seguintes opções são válidas para ficheiros.exe, .dll, .obj, .lib e .winmd apenas para saídas de ficheiros ou consolas.
Opção | Descrição |
---|---|
/metadata[=specifier ] |
Mostra metadados, onde specifier está:MDHEADER – mostrar as informações e tamanhos do cabeçalho de metadados. HEX – mostrar informações em hexadecim e em palavras. CSV – mostrar as contagens de registos e os tamanhos da área dinâmica para dados. UNREX – mostrar externos não resolvidos. SCHEMA – mostrar as informações de esquema e cabeçalho de metadados. RAW — Mostrar as tabelas de metadados não processados. HEAPS – mostrar as áreas dinâmicas para dados não processados. VALIDATE — Valide a consistência dos metadados. Pode especificar /metadados várias vezes, com valores diferentes para specifier . |
As seguintes opções são válidas para ficheiros .lib apenas para saídas de ficheiros ou consolas.
Opção | Descrição |
---|---|
/objectfile=filename |
Mostra os metadados de um único ficheiro de objeto na biblioteca especificada. |
Nota
Todas as opções para Ildasm.exe não são sensíveis a maiúsculas e 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 opera apenas em ficheiros PE no disco. Não funciona em ficheiros instalados na cache de assemblagem global.
O ficheiro de texto produzido por Ildasm.exe pode ser utilizado como entrada para o Assemblador IL (Ilasm.exe). Isto é útil, por exemplo, ao compilar código numa linguagem de programação que não suporta todos os atributos de metadados de runtime. Depois de compilar o código e executar a saída através doIldasm.exe, o ficheiro de texto IL resultante pode ser editado à mão para adicionar os atributos em falta. Em seguida, pode executar este ficheiro de texto através do Assemblador IL para produzir um ficheiro executável final.
Nota
Atualmente, não pode utilizar esta técnica com ficheiros PE que contenham código nativo incorporado (por exemplo, ficheiros PE produzidos pelo Visual C++).
Pode utilizar a GUI predefinida no Desassemblador IL para ver os metadados e o código desmontado de qualquer ficheiro PE existente numa vista de árvore hierárquica. Para utilizar a GUI, escreva ildasm na linha de comandos sem fornecer o argumento PEfilename ou quaisquer opções. No menu Ficheiro , pode navegar para o ficheiro PE que pretende carregar para oIldasm.exe. Para guardar os metadados e o código desmontado apresentado para o PE selecionado, selecione o comando Captura no menu Ficheiro . Para guardar apenas a vista de árvore hierárquica, selecione o comando Capturar Vista de Árvore no menu Ficheiro . Para obter um guia detalhado sobre como carregar um ficheiro para oIldasm.exe e interpretar a saída, veja o Tutorial Ildasm.exe , localizado na pasta Exemplos que é fornecida com o SDK do Windows.
Se fornecer Ildasm.exe com um argumento PEfilename que contém recursos incorporados, a ferramenta produz vários ficheiros de saída: um ficheiro de texto que contém código IL e, para cada recurso gerido incorporado, um ficheiro .resources produzido com o nome do recurso a partir de metadados. Se um recurso não gerido estiver incorporado em PEfilename, é produzido um ficheiro .res com o nome de ficheiro especificado para a saída IL pela opção /output .
Nota
Ildasm.exe mostra apenas descrições de metadados para ficheiros de entrada .obj e .lib . O código IL para estes tipos de ficheiro não é desmontado.
Pode executar Ildasm.exe através de an.exe ou .dll ficheiro para determinar se o ficheiro é gerido. Se o ficheiro não for gerido, a ferramenta apresenta uma mensagem a indicar que o ficheiro não tem um cabeçalho de runtime de linguagem comum válido e que não pode ser desmontado. Se o ficheiro for gerido, a ferramenta é executada com êxito.
Informações sobre a Versão
A partir do .NET Framework 4.5, Ildasm.exe processa um BLOB de marshal não reconhecido (objeto binário grande) ao apresentar o conteúdo binário não processado. Por exemplo, o código seguinte mostra como um BLOB de marshal gerado por um programa C# é apresentado:
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 apresenta atributos que são aplicados às implementações da interface, conforme mostrado no seguinte excerto 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 seguinte faz com que os metadados e o código desmontado para o ficheiro MyHello.exe
PE seja apresentado na GUI predefinidaIldasm.exe .
ildasm myHello.exe
O comando seguinte desmonta o ficheiro MyFile.exe
e armazena o texto do Assemblador IL resultante no ficheiro MyFile.il.
ildasm MyFile.exe /output:MyFile.il
O comando seguinte desmonta o ficheiro MyFile.exe
e apresenta o texto do Assemblador IL resultante na janela da consola.
ildasm MyFile.exe /text
Se o ficheiro MyApp.exe
contiver recursos geridos e não geridos incorporados, o seguinte comando produz quatro ficheiros: MyApp.il, MyApp.res, Icons.resources e Message.resources:
ildasm MyApp.exe /output:MyApp.il
O comando seguinte desmonta o método MyMethod
dentro da classe MyClass
em MyFile.exe
e apresenta o resultado na janela da consola.
ildasm /item:MyClass::MyMethod MyFile.exe /text
No exemplo anterior, podem existir vários métodos denominados MyMethod
com assinaturas diferentes. O comando seguinte desmonta o método MyMethod
de instância com o tipo de retorno de vazio e os tipos de parâmetro int32 e cadeia.
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 tem de ser equilibrado por um parêntese direito após a assinatura: MyMethod(instance void(int32))
. A partir do .NET Framework 2.0, o parêntese de fecho tem de ser omitido: MyMethod(instance void(int32)
.
Para obter um static
método (Shared
método no Visual Basic), omita a palavra-chave instance
. Os tipos de classe que não são tipos primitivos como int32
e string
têm de incluir o espaço de nomes e têm de ser precedidos pela palavra-chave class
. Os tipos externos têm de ser precedidos pelo nome da biblioteca entre parênteses retos. O comando seguinte desmonta um método estático com o nome 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 tem de ser precedido pela classe que contém, delimitado por uma barra para a frente. Por exemplo, se a MyNamespace.MyClass
classe contiver uma classe aninhada chamada NestedClass
, a classe aninhada é identificada da seguinte forma: class MyNamespace.MyClass/NestedClass
.
Ver também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários