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 class wordt 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 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 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 NestedClass
bevat, wordt de geneste klasse als volgt geïdentificeerd: class MyNamespace.MyClass/NestedClass
.
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort: Gedurende 2024 worden GitHub Issues uitgefaseerd als het feedbackmechanisme voor inhoud. Dit wordt vervangen door een nieuw feedbacksysteem. Ga voor meer informatie naar:Feedback verzenden en bekijken voor