Freigeben über


Vorgehensweise: Anzeigen von Assembly-Inhalten

Sie können den Ildasm.exe (IL-Disassembler) verwenden, um CIL-Informationen in einer Datei anzuzeigen. Wenn es sich bei der zu untersuchenden Datei um eine Assembly handelt, können diese Informationen die Attribute und Verweise auf andere Module und Assemblys enthalten. Diese Informationen können hilfreich sein, um festzustellen, ob es sich bei einer Datei um eine Assembly oder einen Teil einer Assembly handelt und ob die Datei Verweise auf andere Module oder Assemblys hat.

Wenn Sie den Inhalt einer Assembly mit Ildasm.exeanzeigen möchten, geben Sie an einer Eingabeaufforderung ildasm-Assemblynamen <> ein. Mit dem folgenden Befehl wird beispielsweise die Hello.exe Assembly zerlegt.

ildasm Hello.exe

Um Assemblymanifestinformationen anzuzeigen, doppelklicken Sie im IL-Disassembler-Fenster auf das Manifestsymbol .

Beispiel

Das folgende Beispiel beginnt mit einem einfachen "Hello World"-Programm. Verwenden Sie nach dem Kompilieren des Programms Ildasm.exe , um die Hello.exe Assembly zu zerlegen und das Assemblymanifest anzuzeigen.

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

Wenn Sie den Befehl ildasm.exe auf der Hello.exe-Assembly ausführen und auf das Manifestsymbol im IL-Disassembler-Fenster doppelklicken, wird die folgende Ausgabe erzeugt:

// 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

In der folgenden Tabelle werden die einzelnen Direktiven im Assemblymanifest der im Beispiel verwendeten Hello.exe-Assembly beschrieben:

Richtlinie BESCHREIBUNG
assembly extern <Assemblyname> Gibt eine weitere Assembly an, die Elemente enthält, auf die vom aktuellen Modul verwiesen wird (in diesem Beispiel). mscorlib
.publickeytoken-Token <> Gibt das Token des tatsächlichen Schlüssels der Assembly an, auf die verwiesen wird.
.ver <Versionsnummer> Gibt die Versionsnummer der Assembly an, auf die verwiesen wird.
Assemblyname <> Gibt den Assemblynamen an.
.Hash-Algorithmus <int32-Wert> Gibt den verwendeten Hashalgorithmus an.
.ver <Versionsnummer> Gibt die Versionsnummer der Assembly an.
.module <Dateiname> Gibt den Namen der Module an, aus denen die Assembly besteht. In diesem Beispiel besteht die Assembly aus nur einer Datei.
Teilsystemwert <> Gibt die anwendungsumgebung an, die für das Programm erforderlich ist. In diesem Beispiel gibt der Wert 3 an, dass diese ausführbare Datei über eine Konsole ausgeführt wird.
.corflags Derzeit ein reserviertes Feld in den Metadaten.

Ein Assemblierungsmanifest kann, abhängig vom Inhalt der Assemblierung, eine Reihe verschiedener Direktiven enthalten. Eine umfangreiche Liste der Direktiven im Assemblymanifest finden Sie in der Ecma-Dokumentation, insbesondere "Partition II: Metadata Definition and Semantics" und "Partition III: CIL Instruction Set":

Siehe auch