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 instance
weg. 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 NestedClass
bevat, wordt de geneste klasse als volgt geïdentificeerd: class MyNamespace.MyClass/NestedClass