Partilhar via


Como visualizar o conteúdo do assembly

Você pode usar o Ildasm.exe (IL Disassembler) para exibir informações de linguagem intermediária comum (CIL) em um arquivo. Se o arquivo que está sendo examinado for um conjunto, as informações podem incluir os atributos do conjunto e referências a outros módulos e conjuntos. Essas informações podem ser úteis para determinar se um ficheiro é uma montagem ou parte de uma montagem e se o ficheiro tem referências a outros módulos ou montagens.

Para exibir o conteúdo de um assembly usando Ildasm.exe, digite ildasm <assembly name> em um prompt de comando. Por exemplo, o comando a seguir desmonta o Hello.exe assembly.

ildasm Hello.exe

Para exibir informações do manifesto de assembly, clique duas vezes no ícone Manifest na janela IL Disassembler.

Exemplo

O exemplo a seguir começa com um programa básico "Hello World". Depois de compilar o programa, use Ildasm.exe para desmontar o assembly Hello.exe e exibir o manifesto do assembly.

using System;

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class

Executar o comando ildasm.exe no assembly Hello.exe e clicar duas vezes no ícone Manifesto na janela IL Disassembler produz a seguinte saída:

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Hello
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00600000

A tabela a seguir descreve cada diretiva no manifesto do assembly Hello.exe usado no exemplo.

Diretiva Descrição
.assembly extern <nome do assembly> Especifica outro assembly que contém itens referenciados pelo módulo atual (neste exemplo, mscorlib).
Token .publickeytoken <> Especifica o token da chave real da assemblagem referenciada.
.ver <Número de versão> Especifica o número da versão do assembly referenciado.
.assembly <Nome do assembly> Especifica o nome do assembly.
Algoritmo .hash <valor int32> Especifica o algoritmo de hash usado.
.ver <Número de versão> Especifica o número da versão do assembly.
Nome do arquivo .module <> Especifica o nome dos módulos que compõem a assemblagem. Neste exemplo, o assembly consiste em apenas um arquivo.
.subsystem <Valor> Especifica o ambiente de aplicativo necessário para o programa. Neste exemplo, o valor 3 indica que este executável é executado a partir de uma consola.
.corflags Atualmente um campo reservado nos metadados.

Um manifesto de montagem pode conter várias diretivas diferentes, dependendo do conteúdo da montagem. Para obter uma lista extensa das diretivas no manifesto do assembly, consulte a documentação do Ecma, em particular "Partition II: Metadata Definition and Semantics" e "Partition III: CIL Instruction Set"

Ver também