Partilhar via


Como: Exibir 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 assembly, essas informações podem incluir os atributos do assembly e referências a outros módulos e assemblies. Essas informações podem ser úteis para determinar se um arquivo é um assembly ou parte de um assembly e se o arquivo tem referências a outros módulos ou assemblies.

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 de manifesto de assembly, clique duas vezes no ícone Manifesto 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 namespace System;

class MainApp
{
public:
    static void Main()
    {
        Console::WriteLine("Hello World using C++/CLI!");
    }
};

int main()
{
    MainApp::Main();
}
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 de assembly do assembly Hello.exe usado no exemplo:

Diretiva Description
Nome do assembly externo <.assembly> Especifica outro assembly que contém itens referenciados pelo módulo atual (neste exemplo, mscorlib).
Token .publickeytoken <> Especifica o token da chave real do assembly referenciado.
Número de versão .ver <> Especifica o número da versão do assembly referenciado.
Nome do assembly .assembly <> Especifica o nome do assembly.
Algoritmo <.hash valor int32> Especifica o algoritmo de hash usado.
Número de versão .ver <> Especifica o número da versão do assembly.
Nome do arquivo .module <> Especifica o nome dos módulos que compõem o assembly. Neste exemplo, o assembly consiste em apenas um arquivo.
Valor .subsystem <> 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, especialmente "Partition II: Metadata Definition and Semantics" e "Partition III: CIL Instruction set":

Consulte também