Delen via


Ildasm.exe (IL Disassembler)

De IL Disassembler is een hulphulpmiddel voor de IL Assemblyer (Ilasm.exe). Ildasm.exe gebruikt een uitvoerbaar PE-bestand (Portable Executable) met tussenliggende taalcode (IL) 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 de Visual Studio Developer-opdrachtprompt of Visual Studio Developer PowerShell.

Typ het volgende bij de opdrachtprompt:

Syntaxis

ildasm [options] [PEfilename] [options]

Parameters

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

Optie Omschrijving
/out= filename Hiermee maakt u een uitvoerbestand met de opgegeven filename, in plaats van de resultaten weer te geven in een grafische gebruikersinterface.
/rtf Produceert uitvoer in rtf-tekstindeling. Ongeldig met de optie /text .
/Sms 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 extra opties zijn beschikbaar voor .exe-, .dll- en .winmd-bestanden.

Optie Omschrijving
/Bytes Geeft de werkelijke bytes weer, in hexadecimale notatie, als instructieopmerkingen.
/caverbal Produceert aangepaste kenmerk-blobs in mondelinge vorm. De standaardwaarde is een binair formulier.
/linnenum Bevat verwijzingen naar oorspronkelijke bronlijnen.
/nobar Onderdrukt het pop-upvenster voor de voortgangsindicator voor de demontage.
/noca Onderdrukt de uitvoer van aangepaste kenmerken.
/project Geeft metagegevens weer zoals het lijkt op beheerde code, in plaats van de manier waarop deze wordt weergegeven in de systeemeigen Windows Runtime. Als PEfilename dit geen Windows-metagegevensbestand (.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 bronlijnen als opmerkingen.
/Tokens Toont metagegevenstokens van klassen en leden.
/visibility: vis[+vis...] Hiermee worden alleen typen of leden gedemonteerd met de opgegeven zichtbaarheid. Hier volgen geldige waarden voor vis:

PUB — Openbaar

PRI — Privé

FAMILIA — 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 bestand- of console-uitvoer.

Optie Omschrijving
/alle Hiermee geeft u een combinatie van de opties /header, /bytes, /stats, /classlist en /tokens .
/classlist Bevat een lijst met klassen die zijn gedefinieerd in de module.
/voorwaarts Maakt gebruik van declaratie van forward class.
/Headers Bevat informatie over de bestandskoptekst in de uitvoer.
/item: class[:: member[(sig]] Demonteert het volgende, afhankelijk van het opgegeven argument:

- Demonteren de opgegeven class.
- Demonteren de opgegeven member van de class.
- Demonteert de member van de class met de opgegeven handtekening sig. De indeling sig is:
[instance] returnType(parameterType1, parameterType2, ..., parameterTypeN)
Opmerking In .NET Framework versie 1.0 en 1.1 moet sig 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 op de afbeelding.
/typelist Produceert de volledige lijst met typen, om de volgorde van het type in een retour te behouden.
/Unicode Maakt gebruik van Unicode-codering voor de uitvoer.
/utf8 Maakt gebruik van UTF-8-codering voor de uitvoer. ANSI is de standaardwaarde.

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

Optie Omschrijving
/metadata[=specifier] Toont metagegevens, waar specifier is:

MDHEADER : geef de gegevens en grootten van de metagegevensheader weer.

HEX : informatie weergeven in hex en in woorden.

CSV : de recordaantallen en heapgrootten weergeven.

UNREX — Niet-opgeloste externen weergeven.

SCHEMA : de metagegevenskoptekst en schemagegevens weergeven.

RAW : de onbewerkte metagegevenstabellen weergeven.

HEAPS — Toon de onbewerkte heaps.

VALIDATE : valideer de consistentie van de metagegevens.

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

De volgende opties zijn alleen geldig voor LIB-bestanden voor bestand- of console-uitvoer.

Optie Omschrijving
/objectbestand=filename Toont de metagegevens van één objectbestand in de opgegeven bibliotheek.

Notitie

Alle opties voor Ildasm.exe zijn hoofdlettergevoelig en herkend door de eerste drie letters. Bijvoorbeeld: /quo is gelijk aan /quoteallnames. Opties waarmee argumenten worden opgegeven, 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 algemene assemblycache.

Het tekstbestand dat door Ildasm.exe wordt geproduceerd, kan worden gebruikt als invoer voor de IL Assemblyer (Ilasm.exe). Dit is bijvoorbeeld handig bij het compileren van code in een programmeertaal die niet alle kenmerken van de 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 Assemblyer 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. Ga in het menu Bestand naar het PE-bestand dat u wilt laden in Ildasm.exe. Als u de metagegevens en gedemonteerde code wilt opslaan die voor de geselecteerde PE wordt weergegeven, selecteert u de opdracht Dump in het menu Bestand . Als u de hiërarchische structuurweergave alleen wilt opslaan, selecteert u de opdracht Treeview 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 de Ildasm.exe Zelfstudie, die zich in de map Voorbeelden bevindt die wordt geleverd met de Windows SDK.

Als u Ildasm.exe een PEfilename-argument opgeeft dat ingesloten resources bevat, produceert het hulpprogramma meerdere uitvoerbestanden: een tekstbestand dat IL-code bevat en, voor elke ingesloten beheerde resource, een .resources-bestand dat wordt geproduceerd met behulp van 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 metagegevensbeschrijvingen 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, wordt in het hulpprogramma een bericht weergegeven waarin wordt aangegeven dat het bestand geen geldige common language runtime-header 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 wordt 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 worden 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 Assemblyer-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 Assemblyer-tekst weergegeven in het consolevenster.

ildasm MyFile.exe /text

Als het bestand MyApp.exe ingesloten beheerde en niet-beheerde 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 in 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 zijn met verschillende handtekeningen.MyMethod Met de volgende opdracht wordt de instantiemethode MyMethod gedemonteerd met het retourtype ongeldigheid 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 moeten het haakje links na de methodenaam worden verdeeld met een haakje rechts na de handtekening: MyMethod(instance void(int32)) Vanaf .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 gedemonteerd die MyMethod één parameter van het type AppDomain heeft en een retourtype AppDomainheeft.

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

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

Zie ook