Share via


Ildasm.exe (IL Disassembler)

De IL Disassembler is een bijbehorend hulpmiddel voor de IL Assembler (Ilasm.exe). Ildasm.exe gebruikt een draagbaar uitvoerbaar bestand (PE) dat IL-code (Intermediate Language) bevat en maakt een tekstbestand dat geschikt is als invoer voor Ilasm.exe.

Dit hulpprogramma wordt automatisch geïnstalleerd met Visual Studio. Als u het hulpprogramma wilt uitvoeren, gebruikt u Visual Studio Developer Command Prompt of Visual Studio Developer PowerShell.

Typ het volgende bij de opdrachtprompt:

Syntaxis

ildasm [options] [PEfilename] [options]

Parameters

De volgende opties zijn beschikbaar voor bestanden.exe, .dll, .obj, .lib en .winmd .

Optie Beschrijving
/out=filename Hiermee maakt u een uitvoerbestand met de opgegeven filename, in plaats van de resultaten weer te geven in een grafische gebruikersinterface.
/rtf Hiermee wordt uitvoer in rtf-indeling geproduceerd. Ongeldig met de optie /text .
/Tekst Geeft de resultaten weer in het consolevenster in plaats van in een grafische gebruikersinterface of als uitvoerbestand.
/Html Produceert uitvoer in HTML-indeling. Alleen geldig met de optie /output .
/? Geeft de syntaxis van de opdracht en opties voor het hulpprogramma weer.

De volgende aanvullende opties zijn beschikbaar voor bestanden.exe, .dllen .winmd .

Optie Beschrijving
/Bytes Toont werkelijke bytes, in hexadecimale indeling, als instructieopmerkingen.
/caverbal Produceert aangepaste kenmerk-blobs in verbale vorm. De standaardwaarde is een binaire vorm.
/linenum Bevat verwijzingen naar oorspronkelijke bronregels.
/nobar Onderdrukt het pop-upvenster voor de voortgangsindicator voor de demontage.
/noca Onderdrukt de uitvoer van aangepaste kenmerken.
/Project Hiermee worden metagegevens weergegeven zoals deze worden weergegeven voor beheerde code, in plaats van de manier waarop deze worden weergegeven in de systeemeigen Windows Runtime. Als PEfilename het geen Windows-bestand met metagegevens (.winmd) is, heeft deze optie geen effect. Zie .NET Framework Ondersteuning voor Windows Store-apps en Windows Runtime.
/pubonly Hiermee worden alleen openbare typen en leden gedemonteerd. Gelijk aan /visibility:PUB.
/quoteallnames Bevat alle namen tussen enkele aanhalingstekens.
/raweh Toont uitzonderingsafhandelingsclausules in onbewerkte vorm.
/Bron Toont oorspronkelijke bronregels als opmerkingen.
/Tokens Toont metagegevenstokens van klassen en leden.
/Zichtbaarheid:vis [+vis...] Alleen typen of leden met de opgegeven zichtbaarheid worden gedemonteerd. Hier volgen geldige waarden voor vis:

PUB — Openbaar

PRI — Privé

FAM — Familie

ASM — Assembly

FAA — Familie en assembly

FOA — Familie of Assembly

PSC : privébereik

Zie en TypeAttributesvoor definities van deze zichtbaarheidsaanpassingenMethodAttributes.

De volgende opties zijn alleen geldig voor .exe-, .dll- en .winmd-bestanden voor bestands- of console-uitvoer.

Optie Beschrijving
/Alle Hiermee geeft u een combinatie van de opties /header, /bytes, /stats, /classlist en /tokens .
/classlist Bevat een lijst met klassen die in de module zijn gedefinieerd.
/doorsturen Maakt gebruik van forward-klassedeclaratie.
/Headers Bevat informatie over bestandsheaders in de uitvoer.
/Item:class [::member [(sig]] Hiermee wordt het volgende gedemonteerd, afhankelijk van het opgegeven argument:

- De opgegeven wordt gedemonteerd class.
- De opgegeven van de classwordt gedemonteerdmember.
- Demonteert de member van de class met de opgegeven handtekening sig. De indeling van sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Opmerking In de .NET Framework versies 1.0 en 1.1, sig moet worden gevolgd door een haakje sluiten: (sig). Vanaf Net Framework 2.0 moet het haakje sluiten worden weggelaten: (sig.
/noil Onderdrukt de uitvoer van il-assemblycode.
/Stats Bevat statistieken over de afbeelding.
/typelist Produceert de volledige lijst met typen, om de volgorde van typen in een retour te behouden.
/Unicode Gebruikt Unicode-codering voor de uitvoer.
/utf8 Gebruikt UTF-8-codering voor de uitvoer. ANSI is de standaardinstelling.

De volgende opties zijn alleen geldig voor bestanden met.exe, .dll, .obj, .lib en .winmd voor bestands- of console-uitvoer.

Optie Beschrijving
/metadata[=specifier] Toont metagegevens, waarbij specifier zich het volgende bevindt:

MDHEADER : de headergegevens en grootten van de metagegevens weergeven.

HEX: informatie weergeven in hex en in woorden.

CSV : het aantal records en heapgrootten weergeven.

UNREX : niet-opgeloste externe gegevens weergeven.

SCHEMA : de metagegevensheader en schemagegevens weergeven.

RAW : de onbewerkte metagegevenstabellen weergeven.

HEAPS : de onbewerkte heaps weergeven.

VALIDATE : valideer de consistentie van de metagegevens.

U kunt /metagegevens meerdere keren opgeven, met verschillende waarden voor specifier.

De volgende opties zijn alleen geldig voor .lib-bestanden voor bestands- of console-uitvoer.

Optie Beschrijving
/objectfile=filename Toont de metagegevens van een bestand met één object in de opgegeven bibliotheek.

Notitie

Alle opties voor Ildasm.exe zijn hoofdlettergevoelig en worden herkend door de eerste drie letters. Bijvoorbeeld, /quo is gelijk aan /quoteallnames. Opties die argumenten opgeven, accepteren een dubbele punt (:) of een gelijkteken (=) als scheidingsteken tussen de optie en het argument. Bijvoorbeeld, /output:bestandsnaam is gelijk aan /output=bestandsnaam.

Opmerkingen

Ildasm.exe werkt alleen op PE-bestanden op schijf. Het werkt niet op bestanden die zijn geïnstalleerd in de global assembly-cache.

Het tekstbestand dat door Ildasm.exe wordt geproduceerd, kan worden gebruikt als invoer voor de IL Assembler (Ilasm.exe). Dit is bijvoorbeeld handig bij het compileren van code in een programmeertaal die niet alle kenmerken van runtimemetagegevens ondersteunt. Na het compileren van de code en het uitvoeren van de uitvoer via Ildasm.exe, kan het resulterende IL-tekstbestand met de hand worden bewerkt om de ontbrekende kenmerken toe te voegen. U kunt dit tekstbestand vervolgens uitvoeren via de IL Assembler om een definitief uitvoerbaar bestand te produceren.

Notitie

Op dit moment kunt u deze techniek niet gebruiken met PE-bestanden die ingesloten systeemeigen code bevatten (bijvoorbeeld PE-bestanden die worden geproduceerd door Visual C++).

U kunt de standaard-GUI in de IL Disassembler gebruiken om de metagegevens en gedemonteerde code van een bestaand PE-bestand in een hiërarchische structuurweergave weer te geven. Als u de GUI wilt gebruiken, typt u ildasm op de opdrachtregel zonder het argument PEfilename of eventuele opties op te geven. In het menu Bestand kunt u naar het PE-bestand navigeren dat u in Ildasm.exewilt laden. Als u de metagegevens en gedemonteerde code wilt opslaan die voor de geselecteerde PE worden weergegeven, selecteert u de opdracht Dump in het menu Bestand . Als u alleen de hiërarchische structuurweergave wilt opslaan, selecteert u de opdracht Structuurweergave dumpen in het menu Bestand . Voor een gedetailleerde handleiding voor het laden van een bestand in Ildasm.exe en het interpreteren van de uitvoer, raadpleegt u deIldasm.exe Zelfstudie in de map Voorbeelden die wordt geleverd bij de Windows SDK.

Als u Ildasm.exe opgeeft met het argument PEfilename dat ingesloten resources bevat, produceert het hulpprogramma meerdere uitvoerbestanden: een tekstbestand met IL-code en, voor elke ingesloten beheerde resource, een .resources-bestand dat is geproduceerd met de naam van de resource uit metagegevens. Als een niet-beheerde resource is ingesloten in PEfilename, wordt een .res-bestand geproduceerd met behulp van de bestandsnaam die is opgegeven voor IL-uitvoer door de optie /output .

Notitie

Ildasm.exe toont alleen beschrijvingen van metagegevens voor .obj - en .lib-invoerbestanden . IL-code voor deze bestandstypen wordt niet gedemonteerd.

U kunt Ildasm.exe uitvoeren via an.exe of .dll bestand om te bepalen of het bestand wordt beheerd. Als het bestand niet wordt beheerd, geeft het hulpprogramma een bericht weer waarin staat dat het bestand geen geldige runtime-header voor de algemene taal heeft en niet kan worden gedemonteerd. Als het bestand wordt beheerd, wordt het hulpprogramma uitgevoerd.

Versie-informatie

Vanaf .NET Framework 4.5 verwerkt Ildasm.exe een niet-herkende marshal-BLOB (binair groot object) door de onbewerkte binaire inhoud weer te geven. De volgende code laat bijvoorbeeld zien hoe een marshal-BLOB wordt weergegeven die is gegenereerd door een C#-programma:

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

Vanaf .NET Framework 4.5 geeft Ildasm.exe kenmerken weer die zijn toegepast op interface-implementaties, zoals wordt weergegeven in het volgende fragment van Ildasm.exe uitvoer:

.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 )
      …

Voorbeelden

De volgende opdracht zorgt ervoor dat de metagegevens en gedemonteerde code voor het PE-bestand MyHello.exe worden weergegeven in de Ildasm.exe standaard-GUI.

ildasm myHello.exe

Met de volgende opdracht wordt het bestand MyFile.exe gedemonteerd en wordt de resulterende IL Assembler-tekst opgeslagen in het bestand MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Met de volgende opdracht wordt het bestand MyFile.exe gedemonteerd en wordt de resulterende IL Assembler-tekst weergegeven in het consolevenster.

ildasm MyFile.exe /text

Als het bestand MyApp.exe ingesloten beheerde en onbeheerde resources bevat, produceert de volgende opdracht vier bestanden: MyApp.il, MyApp.res, Icons.resources en Message.resources:

ildasm MyApp.exe /output:MyApp.il

Met de volgende opdracht wordt de methode MyMethod binnen de klasse MyClass in MyFile.exe gedemonteerd en wordt de uitvoer weergegeven in het consolevenster.

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

In het vorige voorbeeld kunnen er verschillende methoden met de naam MyMethod met verschillende handtekeningen zijn. Met de volgende opdracht wordt de instantiemethode MyMethod gedemonteerd met het retourtype void en de parametertypen int32 en tekenreeks.

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

Notitie

In de .NET Framework versies 1.0 en 1.1 moet het haakje links na de naam van de methode worden afgewogen door een haakje rechts na de handtekening: MyMethod(instance void(int32)). Vanaf de .NET Framework 2.0 moet het haakje sluiten worden weggelaten: MyMethod(instance void(int32).

Als u een static methode (Shared methode in Visual Basic) wilt ophalen, laat u het trefwoord instanceweg. Klassetypen die geen primitieve typen zijn, zoals int32 en string moeten de naamruimte bevatten en moeten worden voorafgegaan door het trefwoord class. Externe typen moeten worden voorafgegaan door de naam van de bibliotheek tussen vierkante haken. Met de volgende opdracht wordt een statische methode met de naam MyMethod gedemonteerd die één parameter van het type AppDomain heeft en het retourtype AppDomainheeft.

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

Een geneste type moet worden voorafgegaan door de bijbehorende klasse, gescheiden door een slash. Als de MyNamespace.MyClass klasse bijvoorbeeld een geneste klasse met de naam NestedClassbevat, wordt de geneste klasse als volgt geïdentificeerd: class MyNamespace.MyClass/NestedClass.

Zie ook