Compartilhar via


Como exibir o conteúdo do assembly

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

Para exibir o conteúdo de um assembly usando Ildasm.exe, insira o nome< do assembly ildasm > em um prompt de comando. Por exemplo, o comando a seguir descompila o assemblyHello.exe.

ildasm Hello.exe

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

Exemplo

O exemplo a seguir começa com um programa básico "Olá, Mundo". Depois de compilar o programa, use Ildasm.exe para desmontar a instrução Hello.exe e exibir o manifesto da instrução.

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

Executando o comando ildasm.exe no assembly Hello.exe e clicando duas vezes no ícone Manifest 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 da montagem do 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 efetiva da assembly referenciada.
.ver <número da versão> Especifica o número de 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 da versão> Especifica o número de versão do assembly.
Nome do arquivo .module <> Especifica o nome dos módulos que compõem a montagem. Neste exemplo, o assembly consiste em apenas um arquivo.
Valor do .subsystem <> Especifica o ambiente do aplicativo necessário para o programa. Neste exemplo, o valor 3 indica que esse executável é executado a partir de um console.
.corflags Atualmente, um campo reservado nos metadados.

Um manifesto de conjunto pode conter várias diretivas diferentes, dependendo do conteúdo do conjunto. Para obter uma extensa lista das diretivas no manifesto do assembly, consulte a documentação do Ecma, especialmente "Partição II: Definição e Semântica de Metadados" e "Partição III: Conjunto de Instruções CIL":

Consulte também