Ildasm.exe (IL Disassembler)Ildasm.exe (IL Disassembler)

Der IL-Disassembler ist ein ergänzendes Tool zum IL-Assembler (Ilasm.exe).The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). Ildasm.exe erfasst eine portierbare ausführbare Datei (Portable Executable, PE) mit IL-Code (Intermediate Language) und erstellt eine Textdatei, die in Ilasm.exe eingegeben werden kann.Ildasm.exe takes a portable executable (PE) file that contains intermediate language (IL) code and creates a text file suitable as input to Ilasm.exe.

Dieses Tool wird automatisch mit Visual Studio installiert.This tool is automatically installed with Visual Studio. Zum Ausführen des Tools verwenden Sie die Developer-Eingabeaufforderung (oder die Visual Studio-Eingabeaufforderung in Windows 7).To run the tool, use the Developer Command Prompt (or the Visual Studio Command Prompt in Windows 7). Weitere Informationen finden Sie unter Eingabeaufforderungen.For more information, see Command Prompts.

Geben Sie an der Eingabeaufforderung Folgendes ein:At the command prompt, type the following:

SyntaxSyntax

ildasm [options] [PEfilename] [options]

ParameterParameters

Für Dateien mit den Erweiterungen .exe, .dll, .obj, .lib und .winmd stehen die folgenden Optionen zur Verfügung.The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

OptionOption descriptionDescription
/out= filename/out= filename Erstellt eine Ausgabedatei mit dem angegebenen filename, anstatt die Ergebnisse in einer grafischen Benutzeroberfläche anzuzeigen.Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf Erzeugt die Ausgabe im RTF-Format.Produces output in rich text format. Ungültig mit der Option /text.Invalid with the /text option.
/text/text Zeigt die Ergebnisse nicht in einer grafischen Benutzeroberfläche oder einer Ausgabedatei an, sondern im Konsolenfenster.Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html Erzeugt die Ausgabe im HTML-Format.Produces output in HTML format. Nur gültig mit der Option /output.Valid with the /output option only.
/?/? Zeigt die Befehlssyntax und Optionen für das Tool an.Displays the command syntax and options for the tool.

Für Dateien mit den Erweiterungen .exe, .dll und .winmd stehen die folgenden zusätzlichen Optionen zur Verfügung.The following additional options are available for .exe, .dll, and .winmd files.

OptionOption descriptionDescription
/bytes/bytes Zeigt die Bytes selbst im Hexadezimalformat als Kommentare zu Anweisungen an.Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal Erzeugt BLOBs des benutzerdefinierten Attributs im verbalen Format.Produces custom attribute blobs in verbal form. Der Standard entspricht dem binären Format.The default is binary form.
/linenum/linenum Enthält Verweise auf die ursprünglichen Quellzeilen.Includes references to original source lines.
/nobar/nobar Unterdrückt die Anzeige des Popupfensters mit der Statusanzeige für die Disassembly.Suppresses the disassembly progress indicator pop-up window.
/noca/noca Unterdrückt die Ausgabe von benutzerdefinierten Attributen.Suppresses the output of custom attributes.
/project/project Zeigt Metadaten so an, wie sie in verwalteten Code angezeigt werden, nicht wie in systemeigenen Windows-RuntimeWindows Runtime.Displays metadata the way it appears to managed code, instead of the way it appears in the native Windows-RuntimeWindows Runtime. Wenn PEfilename keine Windows-Metadatendatei (.winmd) ist, hat diese Option keine Auswirkungen.If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. Informationen finden Sie unter .NET Framework-Unterstützung für Windows Store-Apps und Windows-Runtime.See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly Disassembliert ausschließlich öffentliche Typen und Member.Disassembles only public types and members. Entspricht /visibility:PUB.Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames Schließt alle Namen in einfache Anführungszeichen ein.Includes all names in single quotes.
/raweh/raweh Zeigt Klauseln für die Ausnahmebehandlung in unformatierter Form an.Shows exception handling clauses in raw form.
/source/source Zeigt die ursprünglichen Quellzeilen als Kommentare an.Shows original source lines as comments.
/tokens/tokens Zeigt Metadatentoken von Klassen und Membern an.Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] Disassembliert nur Typen bzw. Member mit der angegebenen Sichtbarkeit.Disassembles only types or members with the specified visibility. Die folgenden Werte sind für vis gültig:The following are valid values for vis:

PUB – PublicPUB — Public

PRI – PrivatePRI — Private

FAM – FamilyFAM — Family

ASM – AssemblyASM — Assembly

FAA – Family und AssemblyFAA — Family and Assembly

FOA – Family oder AssemblyFOA — Family or Assembly

PSC – Private ScopePSC — Private Scope

Definitionen dieser Sichtbarkeitsmodifizierer finden Sie unter MethodAttributes und TypeAttributes.For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

Die folgenden Optionen gelten nur für Dateien mit den Erweiterungen .exe, .dll und .winmd bei der Ausgabe in einer Datei oder der Konsole.The following options are valid for .exe, .dll, and .winmd files for file or console output only.

OptionOption descriptionDescription
/all/all Gibt eine Kombination der Optionen /header, /bytes, /stats, /classlist und /tokens an.Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist Umfasst eine Liste der im Modul definierten Klassen.Includes a list of classes defined in the module.
/forward/forward Verwendet die Vorwärtsklassendeklaration.Uses forward class declaration.
/headers/headers Schließt Informationen über den Dateiheader in der Ausgabe ein.Includes file header information in the output.
/item: class[:: member[(sig]]/item: class[:: member[(sig]] Disassembliert Folgendes in Abhängigkeit vom angegebenen Argument:Disassembles the following depending upon the argument supplied:

– Disassembliert die angegebene class.- Disassembles the specified class.
– Disassembliert den angegebenen member der class.- Disassembles the specified member of the class.
– Disassembliert den member der class mit der angegebenen Signatur sig.- Disassembles the member of the class with the specified signature sig. Das Format von sig lautet wie folgt:The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Hinweis: In .NET Framework, Versionen 1.0 und 1.1, muss auf sig eine schließende Klammer folgen: (sig).Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). Ab .NET Framework 2.0 muss die schließende Klammer weggelassen werden: (sig.Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil Unterdrückt die Ausgabe von IL-Assemblycode.Suppresses IL assembly code output.
/stats/stats Schließt Statistiken zum Abbild ein.Includes statistics on the image.
/typelist/typelist Erzeugt die vollständige Liste mit Typen, um die Reihenfolge von Typen bei Roundtrips beizubehalten.Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode Verwendet Unicode-Codierung für die Ausgabe.Uses Unicode encoding for the output.
/utf8/utf8 Verwendet UTF-8-Codierung für die Ausgabe.Uses UTF-8 encoding for the output. ANSI ist die Standardeinstellung.ANSI is the default.

Die folgenden Optionen gelten nur für Dateien mit den Erweiterungen .exe, .dll, .obj, .lib und .winmd bei der Ausgabe in einer Datei oder der Konsole.The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

OptionOption descriptionDescription
/metadata[=specifier]/metadata[=specifier] Zeigt Metadaten an. Dabei entspricht specifier Folgendem:Shows metadata, where specifier is:

MDHEADER: Zeigt die Headerinformationen und -größen der Metadaten an.MDHEADER — Show the metadata header information and sizes.

HEX: Zeigt Informationen im Hexadezimalformat sowie in Wörtern an.HEX — Show information in hex as well as in words.

CSV: Zeigt die Anzahl von Datensätzen und die Heapgrößen an.CSV — Show the record counts and heap sizes.

UNREX: Zeigt nicht aufgelöste Externe an.UNREX — Show unresolved externals.

SCHEMA: Zeigt den Metadatenheader und Schemainformationen an.SCHEMA — Show the metadata header and schema information.

RAW: Zeigt die nicht formatierten Metadatentabellen an.RAW — Show the raw metadata tables.

HEAPS: zeigt die unformatierten Heaps an.HEAPS — Show the raw heaps.

VALIDATE: Überprüft die Konsistenz der Metadaten.VALIDATE — Validate the consistency of the metadata.

Sie können /metadata mehrmals angeben und unterschiedliche Werte für specifier verwenden.You can specify /metadata multiple times, with different values for specifier.

Die folgenden Optionen gelten nur für LIB-Dateien bei der Ausgabe in eine Datei oder auf der Konsole.The following options are valid for .lib files for file or console output only.

OptionOption descriptionDescription
/objectfile=filename/objectfile=filename Zeigt die Metadaten einer einzelnen Objektdatei in der angegebenen Bibliothek an.Shows the metadata of a single object file in the specified library.

Hinweis

Bei allen Optionen für Ildasm.exe wird nicht zwischen Groß- und Kleinschreibung unterschieden, und sie werden anhand der ersten drei Buchstaben erkannt.All options for Ildasm.exe are case-insensitive and recognized by the first three letters. /quo entspricht beispielsweise /quoteallnames.For example, /quo is equivalent to /quoteallnames. Optionen, die Argumente angeben, können entweder einen Doppelpunkt (:) oder ein Gleichheitszeichen (=) als Trennzeichen zwischen der Option und dem Argument enthalten.Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. So wären zum Beispiel /output: dateiname und /output= dateiname identisch.For example, /output: filename is equivalent to /output= filename.

HinweiseRemarks

Ildasm.exe funktioniert nur bei PE-Dateien auf der Festplatte.Ildasm.exe only operates on PE files on disk. Bei Dateien, die im globalen Assemblycache installiert sind, funktioniert dieses Tool nicht.It does not operate on files installed in the global assembly cache.

Die von Ildasm.exe erstellte Textdatei kann als Eingabe für den IL-Assembler (Ilasm.exe) verwendet werden.The text file produced by Ildasm.exe can be used as input to the IL Assembler (Ilasm.exe). Dies ist zum Beispiel nützlich, wenn Code in einer Programmiersprache programmiert werde soll, die nicht alle Attribute der Metadaten der Laufzeit unterstützt.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Nachdem der Code kompiliert und seine Ausgabe über Ilasm.exe verarbeitet wurde, kann die resultierende IL-Textdatei manuell bearbeitet werden, um die fehlenden Attribute hinzuzufügen.After compiling the code and running its output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. Sie können diese Textdatei anschließend durch den IL-Assembler ausführen, um eine endgültige ausführbare Datei zu erstellen.You can then run this text file through the IL Assembler to produce a final executable file.

Hinweis

Für PE-Dateien, die eingebetteten systemeigenen Code enthalten (z. B. von Visual C++ erstellte PE-Dateien), ist dieses Verfahren gegenwärtig jedoch nicht geeignet.Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

In der als Standard festgelegten grafischen Benutzeroberfläche des IL-Disassemblers können Sie sich die Metadaten und den disassemblierten Code aller vorhandenen PE-Dateien als hierarchische Struktur anzeigen lassen.You can use the default GUI in the IL Disassembler to view the metadata and disassembled code of any existing PE file in a hierarchical tree view. Geben Sie zum Aufrufen der Benutzeroberfläche an der Befehlszeile ildasm ein, ohne dabei das PEfilename-Argument oder Optionen anzugeben.To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. Im Menü Datei können Sie zu der PE-Datei navigieren, die Sie in Ildasm.exe laden möchten.From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. Um die Metadaten und den disassemblierten Code zu speichern, die für die ausgewählte PE angezeigt werden, wählen Sie im Menü Datei den Befehl Sichern aus.To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. Wenn Sie nur die angezeigte hierarchische Struktur speichern möchten, wählen Sie im Menü Datei den Befehl Strukturansicht sichern aus.To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Ausführliche Anleitungen zum Laden einer Datei in Ildasm.exe und zum Interpretieren der Ausgabe finden Sie im Tutorial für Ildasm.exe. Dies ist im Lieferumfang von Windows Software Development Kit (SDK)Windows Software Development Kit (SDK) enthalten und befindet sich im Ordner „Samples“.For a detailed guide to loading a file into Ildasm.exe and interpreting the output, see the Ildasm.exe Tutorial, located in the Samples folder that ships with the Windows Software Development Kit (SDK)Windows Software Development Kit (SDK).

Wenn Sie Ildasm.exe mit dem PEfilename-Argument angeben, das eingebettete Ressourcen enthält, erstellt das Tool mehrere Ausgabedateien: eine Textdatei mit IL-Code und für jede eingebettete verwaltete Ressource eine RESOURCES-Datei, die unter Verwendung des Ressourcennamens aus Metadaten erstellt wird.If you provide Ildasm.exe with a PEfilename argument that contains embedded resources, the tool produces multiple output files: a text file that contains IL code and, for each embedded managed resource, a .resources file produced using the resource's name from metadata. 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 IL-Ausgabe angegeben wird.If an unmanaged resource is embedded in PEfilename, a .res file is produced using the filename specified for IL output by the /output option.

Hinweis

Ildasm.exe zeigt für Eingabedateien mit den Erweiterungen .obj und .lib nur Metadatenbeschreibungen an.Ildasm.exe shows only metadata descriptions for .obj and .lib input files. Für diese Dateitypen wird IL-Code nicht disassembliert.IL code for these file types is not disassembled.

Sie können Ildasm.exe für eine EXE- oder DLL-Datei ausführen, um festzustellen, ob die Datei verwaltet ist.You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. 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.If the file is not managed, the tool displays a message stating that the file has no valid common language runtime header and cannot be disassembled. Bei einer verwalteten Datei wird das Tool erfolgreich ausgeführt.If the file is managed, the tool runs successfully.

VersionsinformationenVersion Information

Ab .NET Framework 4.5.NET Framework 4.5 verarbeitet Ildasm.exe ein unbekanntes Marshall-BLOB (Binary Large Object), indem der unformatierte binäre Inhalt angezeigt wird.Starting with the .NET Framework 4.5.NET Framework 4.5, Ildasm.exe handles an unrecognized marshal BLOB (binary large object) by displaying the raw binary content. Beispielsweise wird im folgenden Code veranschaulicht, wie ein BLOB-Marshall, der von einem C#-Programm generiert wird, angezeigt wird:For example, the following code shows how a marshal BLOB generated by a C# program is displayed:

public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32  marshal({ 46 }) test) cil managed

Mit .NET Framework 4.5.NET Framework 4.5 zeigt Ildasm.exe Attribute an, die auf Schnittstellenimplementierungen angewendet werden. Dies ist aus folgendem Auszug aus Ildasm.exe ersichtlich:Starting with the .NET Framework 4.5.NET Framework 4.5, Ildasm.exe displays attributes that are applied to interface implementations, as shown in the following excerpt from Ildasm.exe output:

.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

BeispieleExamples

Mit dem folgenden Befehl werden die Metadaten und der disassemblierte Code für die PE-Datei MyHello.exe in der als Standard festgelegten grafischen Benutzeroberfläche von Ildasm.exe angezeigt.The following command causes the metadata and disassembled code for the PE file MyHello.exe to display in the Ildasm.exe default GUI.

ildasm myHello.exe

Der folgende Befehl disassembliert die Datei MyFile.exe und speichert den erstellten IL-Assembler-Text in der Datei MyFile.il.The following command disassembles the file MyFile.exe and stores the resulting IL Assembler text in the file MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Der folgende Befehl disassembliert die Datei MyFile.exe und zeigt den erstellten IL-Assembler-Text im Konsolenfenster an.The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

Wenn die Datei MyApp.exe eingebettete verwaltete und nicht verwaltete Ressourcen enthält, erstellt der folgende Befehl diese vier Dateien: MyApp.il, MyApp.res, Icons.resources und Message.resources:If the file MyApp.exe contains embedded managed and unmanaged resources, the following command produces four files: MyApp.il, MyApp.res, Icons.resources, and Message.resources:

ildasm MyApp.exe /output:MyApp.il

Der folgende Befehl disassembliert die MyMethod-Methode in der MyClass-Klasse in MyFile.exeund zeigt die Ausgabe im Konsolenfenster an.The following command disassembles the method MyMethod within the class MyClass in MyFile.exe and displays the output to the console window.

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

Im vorigen Beispiel waren mehrere Methoden mit dem Namen MyMethod mit unterschiedlichen Signaturen möglich.In the previous example, there could be several methods named MyMethod with different signatures. Der folgende Befehl disassembliert die MyMethod-Instanzmethode mit dem Rückgabetyp void und den Parametertypen int32 und string.The following command disassembles the instance method MyMethod with the return type of void and the parameter types int32 and string.

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

Hinweis

In den .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 the .NET Framework versions 1.0 and 1.1, the left parenthesis that follows the method name must be balanced by a right parenthesis after the signature: MyMethod(instance void(int32)). Ab .NET Framework 2.0 muss die schließende Klammer weggelassen werden: MyMethod(instance void(int32).Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

Um eine static-Methode (Shared-Methode in Visual Basic) abzurufen, lassen Sie das Schlüsselwort instance weg.To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. Klassentypen, die keine Typen sind, beispielsweise int32 und string, müssen den Namespace enthalten, und ihnen muss das Schlüsselwort class vorangestellt sein.Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. Externen Typen muss der Bibliotheksname in eckigen Klammern vorangestellt werden.External types must be preceded by the library name in square brackets. Der folgende Befehl disassembliert eine statische Methode namens MyMethod, die einen Parameter vom Typ AppDomain und den Rückgabetyp AppDomain besitzt.The following command disassembles a static method named MyMethod that has one parameter of type AppDomain and has a return type of AppDomain.

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

Bei einem geschachtelten Typ muss die Klasse, in der er enthalten ist, vorangestellt sein, begrenzt von einem Schrägstrich.A nested type must be preceded by its containing class, delimited by a forward slash. 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.For example, if the MyNamespace.MyClass class contains a nested class named NestedClass, the nested class is identified as follows: class MyNamespace.MyClass/NestedClass.

Siehe auchSee also

ExtrasTools
Ilasm.exe (IL-Assembler)Ilasm.exe (IL Assembler)
Der verwaltete AusführungsprozessManaged Execution Process
EingabeaufforderungenCommand Prompts