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.
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. |
/headers |
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 |
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. |
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 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*.*
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
Visual Studio- und Windows SDK-Eingabeaufforderungen
Konzepte
Der verwaltete Ausführungsprozess
Weitere Ressourcen
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
April 2011 |
Hinzugefügte Informationen zur Verwendung der Visual Studio- und Windows SDK-Eingabeaufforderungen. |
Informationsergänzung. |