MSIL Disassembler-Tool (Ildasm.exe)
Aktualisiert: November 2007
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:
|
/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. |
Tipp
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.
Tipp
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 Windows Software Development Kit (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*.*
Tipp
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
Tipp
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.