Como exibir o conteúdo de um assembly

Você pode usar o Ildasm.exe (Desmontador de IL) para ver as informações da Common Intermediate Language (CIL) em um arquivo. Se o arquivo que estiver sendo examinado for um assembly, essas informações poderão incluir os atributos do assembly e faz referência 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, insira o <nome do assembly> ildasm em um prompt de comando. Por exemplo, o comando a seguir desmonta o assembly Hello.exe.

ildasm Hello.exe

Para ver informações do manifesto do assembly, clique duas vezes no ícone do Manifesto na janela do Desmontador de IL (Linguagem Intermediária).

Exemplo

O exemplo a seguir inicia com um programa básico "Olá, Mundo". Após a compilação do 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 do Manifesto da janela do Desmontador de IL gera o seguinte resultado:

// 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 seguinte tabela descreve cada diretiva no manifesto do assembly de 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).
.publickeytoken <token> Especifica o token da chave real do assembly referenciado.
.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.
.hash algorithm <valor int32> Especifica o algoritmo de hash usado.
.ver <número da versão> Especifica o número de versão do assembly.
.module <nome de arquivo> Especifica o nome dos módulos que compõem o assembly. 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 em um console.
.corflags Atualmente, um campo reservado nos metadados.

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

Confira também