Ildasm.exe (MSIL Disassembler-Tool)

Aktualisiert: April 2011

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.

Dieses Tool wird automatisch mit Visual Studio und mit dem Windows SDK installiert. Um das Tool auszuführen, empfiehlt es sich, dass Sie die Visual Studio-Eingabeaufforderung oder Windows SDK-Eingabeaufforderung (CMD-Shell) verwenden. Mit diesen Hilfsprogrammen können Sie das Tool problemlos ausführen, ohne in den Installationsordner zu navigieren. Weitere Informationen finden Sie unter Visual Studio- und Windows SDK-Eingabeaufforderungen.

  • Wenn Visual Studio auf dem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, Visual Studio und Visual Studio Tools, und klicken Sie dann auf Visual Studio Command Prompt.

    – oder –

    Wenn das Windows SDK auf Ihrem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, klicken Sie auf den Ordner für das Windows SDK, und klicken anschließend auf Command Prompt (oder CMD Shell).

  • Geben Sie an der Eingabeaufforderung Folgendes ein:

ildasm [options] [PEfilename] [options]

Parameter

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

Option

Beschreibungen

/out=Dateiname

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

Beschreibungen

/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

Beschreibungen

/all

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

HinweisHinweis
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.

/headers

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

Beschreibungen

/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

Beschreibungen

/objectfile=filename

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

Neu in .NET Framework, Version 2.0.

HinweisHinweis

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.

HinweisHinweis

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 Sie in "Ildasm.exe" laden möchten. Um die Metadaten und zerlegten Code zu speichern, die für die ausgewählte PE angezeigt werden, wählen Sie im Menü Datei den Befehl Sichern 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 Windows Software Development Kit (SDK) enthalten und befindet sich im Ordner "Samples2.

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*.*

HinweisHinweis

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
HinweisHinweis

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

Ilasm.exe (MSIL-Assembler)

Visual Studio- und Windows SDK-Eingabeaufforderungen

Konzepte

Der verwaltete Ausführungsprozess

Weitere Ressourcen

.NET Framework-Tools

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

April 2011

Hinzugefügte Informationen zur Verwendung der Visual Studio- und Windows SDK-Eingabeaufforderungen.

Informationsergänzung.