MSIL Disassembler-Tool (Ildasm.exe)

Das MSIL Disassembler-Tool ergänzt das MSIL Assembler-Tool (Ilasm.exe). Ildasm.exe erfasst eine PE-Datei (Portable Executable) mit MSIL-Code (Microsoft Intermediate Language) und erstellt eine Textdatei, die in Ilasm.exe eingegeben werden kann.

ildasm [options] [PEfilename] [options]

Parameter

Für Dateien mit den Erweiterungen .exe, .dll, .obj und .lib stehen die folgenden Optionen zur Verfügung.

Option Beschreibung

/output= filename

Erstellt eine Ausgabedatei mit dem angegebenen filename, anstatt die Ergebnisse in einer grafischen Benutzeroberfläche anzuzeigen.

/rtf

Erzeugt die Ausgabe im RTF-Format. Ungültig mit der Option /text.

Neu in .NET Framework, Version 2.0.

/text

Zeigt die Ergebnisse nicht in einer grafischen Benutzeroberfläche oder einer Ausgabedatei, sondern im Konsolenfenster an.

/html

Erzeugt die Ausgabe im HTML-Format. Nur gültig mit der Option /output.

Neu in .NET Framework, Version 2.0.

/?

Zeigt die Befehlssyntax und Optionen für das Tool an.

Für Dateien mit den Erweiterungen .exe und .dll stehen außerdem die folgenden Optionen zur Verfügung.

Option Beschreibung

/bytes

Zeigt die Bytes selbst im Hexadezimalformat als Kommentare zu Anweisungen an.

/caverbal

Erzeugt BLOBs des benutzerdefinierten Attributs im verbalen Format. Der Standard entspricht dem binären Format.

Neu in .NET Framework, Version 2.0.

/linenum

Enthält Verweise auf die ursprünglichen Quellzeilen.

/nobar

Unterdrückt die Anzeige des Popupfensters mit der Statusanzeige für die Disassembly.

/noca

Unterdrückt die Ausgabe von benutzerdefinierten Attributen.

Neu in .NET Framework, Version 2.0.

/pubonly

Disassembliert ausschließlich öffentliche Typen und Member. Entspricht /visibility:PUB.

/quoteallnames

Führt alle Namen in einfachen Anführungszeichen auf.

/raweh

Zeigt Klauseln für die Ausnahmebehandlung in unformatierter Form an.

/source

Zeigt die ursprünglichen Quellzeilen als Kommentare an.

/tokens

Zeigt Metadatentoken von Klassen und Membern an.

/visibility: vis[+vis...]

Disassembliert nur Typen bzw. Member mit der angegebenen Sichtbarkeit. Die folgenden Werte sind für vis gültig:

PUB – Public

PRI – Private

FAM – Family

ASM – Assembly

FAA – Family und Assembly

FOA – Family oder Assembly

PSC – Private Scope

Definitionen dieser Sichtbarkeitsmodifizierer finden Sie unter MethodAttributes und TypeAttributes.

Die folgenden Optionen gelten nur für Dateien mit den Erweiterungen .exe und .dll bei der Ausgabe in einer Datei oder der Konsole.

Option Beschreibung

/all

Gibt eine Kombination der Optionen /header, /bytes, /stats, /classlist und /tokens an.

Hinweis

Gibt in .NET Framework, Version 1.0 und 1.1, eine Kombination der Optionen /header, /bytes und /tokens an.

/classlist

Umfasst eine Liste der im Modul definierten Klassen.

Neu in .NET Framework, Version 2.0.

/forward

Verwendet die Vorwärtsklassendeklaration.

Neu in .NET Framework, Version 2.0.

/header

Bindet Informationen über den Dateiheader in die Ausgabe ein.

/item: class[::member[(sig]]

Disassembliert Folgendes in Abhängigkeit vom angegebenen Argument:

  • Disassembliert die angegebene class.

  • Disassembliert den angegebenen member der class.

  • Disassembliert den member der class mit der angegebenen Signatur sig. Das Format von sig ist:

    [instance] returnType(parameterType1, parameterType2, …, parameterTypeN)

    Hinweis   In .NET Framework, Versionen 1.0 und 1.1, muss auf sig eine schließende Klammer folgen: (sig). In Version 2.0 muss die schließende Klammer weggelassen werden: (sig.

/noil

Unterdrückt die Ausgabe von MSIL-Assemblycode.

/stats

Schließt Statistiken zum Abbild ein.

Neu in .NET Framework, Version 2.0.

/typelist

Erzeugt die vollständige Liste mit Typen, um die Reihenfolge von Typen bei Roundtrips beizubehalten.

Neu in .NET Framework, Version 2.0.

/unicode

Verwendet Unicode-Codierung für die Ausgabe.

/utf8

Verwendet UTF-8-Codierung für die Ausgabe. Die Standardeinstellung ist ANSI.

Die folgenden Optionen gelten nur für Dateien mit den Erweiterungen .exe, .dll, .obj und .lib bei der Ausgabe in einer Datei oder der Konsole.

Option Beschreibung

/metadata[=specifier]

Zeigt Metadaten an. Dabei entspricht specifier Folgendem:

MDHEADER – Zeigt die Headerinformationen und -größen der Metadaten an.

HEX – Zeigt Informationen im Hexadezimalformat sowie in Wörtern an.

CSV – Zeigt die Anzahl von Datensätzen und die Heapgröße an.

UNREX – Zeigt nicht aufgelöste Externe an.

SCHEMA – Zeigt den Metadatenheader und Schemainformationen an.

RAW – Zeigt die nicht formatierten Metadatentabellen an.

HEAPS – Zeigt die nicht formatierten Heaps an.

VALIDATE – Überprüft die Konsistenz der Metadaten.

Sie können /metadata mehrmals angeben und unterschiedliche Werte für specifier verwenden.

Neu in .NET Framework, Version 2.0.

Die folgenden Optionen gelten nur für LIB-Dateien bei der Ausgabe in eine Datei oder auf der Konsole.

Option Beschreibung

/objectfile=filename

Zeigt die Metadaten einer einzelnen Objektdatei in der angegebenen Bibliothek an.

Neu in .NET Framework, Version 2.0.

Hinweis

Bei allen Optionen für Ildasm.exe wird die Groß- und Kleinschreibung nicht berücksichtigt. Sie werden anhand der ersten drei Buchstaben erkannt. /quo ist beispielsweise äquivalent zu /quoteallnames. Optionen, durch die Argumente angegeben werden, können entweder einen Doppelpunkt (:) oder ein Gleichheitszeichen (=) als Trennzeichen zwischen der Option und dem Argument enthalten. /output:filename entspricht beispielsweise /output=filename.

Hinweise

Ildasm.exe funktioniert nur bei PE-Dateien auf der Festplatte. Es kann nicht für Dateien verwendet werden, die im globalen Assemblycache installiert sind.

Die von Ildasm.exe erstellte Textdatei kann als Eingabe für das MSIL Assembler-Tool (Ilasm.exe) verwendet werden. Dies empfiehlt sich z. B. beim Kompilieren von Code in einer Programmiersprache, die nicht alle Attribute der Metadaten der Laufzeit unterstützt. Nach dem Kompilieren des Codes und dem Ausführen seiner Ausgabe durch Ildasm.exe kann die erstellte MSIL-Textdatei manuell bearbeitet werden, um die fehlenden Attribute hinzuzufügen. Sie können diese Textdatei anschließend durch das MSIL Assembler-Tool ausführen, um eine endgültige ausführbare Datei zu erstellen.

Hinweis

Dieses Verfahren kann gegenwärtig nicht auf PE-Dateien angewendet werden, die eingebetteten systemeigenen Code enthalten (z. B. von Visual C++ erstellte PE-Dateien).

In der als Standard festgelegten grafischen Benutzeroberfläche des MSIL Disassembler-Tools können Sie sich die Metadaten und den disassemblierten Code aller vorhandenen PE-Dateien als hierarchische Struktur anzeigen lassen. Zum Aufrufen der Benutzeroberfläche geben Sie an der Befehlszeile ildasm ein, ohne dabei das Argument PEfilename oder Optionen anzugeben. Im Menü Datei können Sie zu der PE-Datei navigieren, die in Ildasm.exe geladen werden soll. Wählen Sie zum Speichern der Metadaten und des disassemblierten Codes, der für die ausgewählte PE-Datei angezeigt wird, im Menü Datei den Befehl Dump aus. Wenn Sie nur die angezeigte hierarchische Struktur speichern möchten, wählen Sie im Menü Datei den Befehl Strukturansicht sichern aus. Ausführliche Anleitungen zum Laden einer Datei in Ildasm.exe und zum Interpretieren der Ausgabe finden Sie im Lernprogramm für Ildasm.exe. Dies ist im Lieferumfang von .NET Framework SDK enthalten und befindet sich im Ordner Samples.

Wenn Sie Ildasm.exe mit dem Argument PEfilename angeben, das eingebettete Ressourcen enthält, erstellt das Tool mehrere Ausgabedateien: eine Textdatei mit MSIL-Code und für jede eingebettete verwaltete Ressource eine RESOURCES-Datei, die unter Verwendung des Ressourcennamens aus Metadaten erstellt wird. Wenn in PEfilename eine nicht verwaltete Ressource eingebettet ist, wird eine RES-Datei unter Verwendung des Dateinamens erstellt, der durch die Option /output für die MSIL-Ausgabe angegeben wird*.*

Hinweis

Ildasm.exe zeigt für Eingabedateien mit den Erweiterungen .obj und .lib nur Metadatenbeschreibungen an. Für diese Dateitypen wird MSIL-Code nicht disassembliert.

Sie können Ildasm.exe für eine EXE- oder DLL-Datei ausführen, um festzustellen, ob die Datei verwaltet ist. Wenn die Datei nicht verwaltet ist, zeigt das Tool eine Meldung an, dass die Datei keinen gültigen Common Language Runtime-Header enthält und nicht disassembliert werden kann. Bei einer verwalteten Datei wird das Tool erfolgreich ausgeführt.

Beispiele

Der folgende Befehl zeigt die Metadaten und den disassemblierten Code für die PE-Datei MyHello.exe in der als Standard festgelegten grafischen Benutzeroberfläche von Ildasm.exe an.

ildasm myHello.exe

Der folgende Befehl disassembliert die Datei MyFile.exe und speichert den erstellten MSIL Assembler-Text in der Datei MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Der folgende Befehl disassembliert die Datei MyFile.exe und zeigt den erstellten MSIL Assembler-Text im Konsolenfenster an.

ildasm MyFile.exe /text

Wenn die Datei MyApp.exe eingebettete verwaltete und nicht verwaltete Ressourcen enthält, erstellt der folgende Befehl vier Dateien: MyApp.il, MyApp.res, Icons.resources, und Message.resources:

ildasm MyApp.exe /output:MyApp.il

Der folgende Befehl disassembliert die MyMethod-Methode in der MyClass-Klasse in MyFile.exe und zeigt die Ausgabe im Konsolenfenster an.

ildasm /item:MyClass::MyMethod MyFile.exe /text

Im vorigen Beispiel waren mehrere Methoden mit dem Namen MyMethod mit unterschiedlichen Signaturen möglich. Der folgende Befehl disassembliert die MyMethod-Instanzmethode mit dem Rückgabetyp void und den Parametertypen int32 und string.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text

Hinweis

In .NET Framework, Versionen 1.0 und 1.1, muss die öffnende Klammer, die auf den Methodennamen folgt, durch eine schließende Klammer hinter der Signatur ergänzt werden: MyMethod(instance void(int32)). In .NET Framework, Version 2.0, muss die schließende Klammer weggelassen werden: MyMethod(instance void(int32).

Um eine static-Methode (Shared-Methode in Visual Basic) abzurufen, lassen Sie das Schlüsselwort instance weg. Klassentypen, die keine Typen sind, beispielsweise int32 und string, müssen den Namespace enthalten, und ihnen muss das Schlüsselwort class vorangestellt sein. Externen Typen muss in eckigen Klammern der Bibliotheksname vorangestellt werden. Der folgende Befehl disassembliert eine statische Methode MyMethod, die einen Parameter vom Typ AppDomain und einen Rückgabetyp von AppDomain besitzt.

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

Einem geschachtelten Typ muss die Klasse, in der er enthalten ist, vorangestellt werden, begrenzt von einem Schrägstrich. Wenn die MyNamespace.MyClass-Klasse z. B. eine geschachtelte Klasse mit dem Namen NestedClass enthält, wird die geschachtelte Klasse folgendermaßen identifiziert: class MyNamespace.MyClass/NestedClass.

Siehe auch

Referenz

.NET Framework-Tools
MSIL Assembler-Tool (Ilasm.exe)
SDK-Eingabeaufforderung

Konzepte

Kompilieren in MSIL