Ildasm.exe (IL Disassembler)
IL Disassembler är ett kompletterande verktyg till IL Assembler (Ilasm.exe). Ildasm.exe tar en portabel körbar (PE)-fil som innehåller kod för mellanliggande språk (IL) och skapar en textfil som är lämplig som indata för Ilasm.exe.
Det här verktyget installeras automatiskt med Visual Studio. Om du vill köra verktyget använder du Visual Studio Developer Command Prompt eller Visual Studio Developer PowerShell.
Skriv följande vid kommandotolken:
Syntax
ildasm [options] [PEfilename] [options]
Parametrar
Följande alternativ är tillgängliga för filer som .exe, .dll, .obj, .lib och .winmd .
Alternativ | Description |
---|---|
/out= filename |
Skapar en utdatafil med angiven filename , i stället för att visa resultatet i ett grafiskt användargränssnitt. |
/rtf | Genererar utdata i RTF-format. Ogiltigt med alternativet /text . |
/SMS | Visar resultatet för konsolfönstret i stället för i ett grafiskt användargränssnitt eller som en utdatafil. |
/HTML | Genererar utdata i HTML-format. Giltigt med alternativet /output . |
/? | Visar kommandosyntaxen och alternativen för verktyget. |
Följande ytterligare alternativ är tillgängliga för .exe-, .dll- och .winmd-filer .
Alternativ | Description |
---|---|
/Byte | Visar faktiska byte, i hexadecimalt format, som instruktionskommenterar. |
/caverbal | Skapar anpassade attributblobar i verbal form. Standardvärdet är binärt formulär. |
/radnummer | Innehåller referenser till ursprungliga källrader. |
/nobar | Undertrycker popup-fönstret för demontering av förloppsindikatorn. |
/noca | Undertrycker utdata från anpassade attribut. |
/projekt | Visar metadata som den ser ut för hanterad kod, i stället för hur den visas i den interna Windows-körningen. Om PEfilename det inte är en Windows-metadatafil (.winmd) har det här alternativet ingen effekt. Se .NET Framework-stöd för Windows Store-appar och Windows Runtime. |
/pubonly | Demonterar endast offentliga typer och medlemmar. Motsvarar /visibility:PUB. |
/quoteallnames | Innehåller alla namn inom enkla citattecken. |
/raweh | Visar undantagshanteringssatser i råform. |
/källa | Visar ursprungliga källrader som kommentarer. |
/Token | Visar metadatatoken för klasser och medlemmar. |
/synlighet: vis [+vis ...] |
Demonterar endast typer eller medlemmar med den angivna synligheten. Följande är giltiga värden för vis :PUB – offentlig PRI – Privat FAM – Familj ASM – sammansättning FAA – Familj och församling FOA – Familj eller sammansättning PSC – privat omfång Definitioner av dessa synlighetsmodifierare finns i MethodAttributes och TypeAttributes. |
Följande alternativ är giltiga för .exe-, .dll- och .winmd-filer endast för fil- eller konsolutdata.
Alternativ | Description |
---|---|
/alla | Anger en kombination av alternativen /header, /bytes, /stats, /classlist och /tokens . |
/classlist | Innehåller en lista över klasser som definierats i modulen. |
/framåt | Använder klassdeklaration framåt. |
/Headers | Innehåller filhuvudinformation i utdata. |
/item: class [:: member [(sig ]] |
Demonterar följande beroende på det angivna argumentet: – Demonterar den angivna class .– Demonterar angivet member för class .– Demonterar member med den angivna signaturen class sig . Formatet sig är:[ instance ] returnType (parameterType1 , parameterType2 , ..., parameterTypeN )Obs! I .NET Framework-versionerna 1.0 och 1.1 sig måste följas av en avslutande parentes: (sig) . Från och med Net Framework 2.0 måste den avslutande parentesen utelämnas: (sig . |
/noil | Undertrycker utdata från IL-sammansättningskod. |
/statistik | Innehåller statistik på bilden. |
/typelist | Skapar en fullständig lista över typer för att bevara typordningen i en tur och retur-resa. |
/unicode | Använder Unicode-kodning för utdata. |
/utf8 | Använder UTF-8-kodning för utdata. ANSI är standardvärdet. |
Följande alternativ gäller endast för .exe-, .dll-, .obj-, .lib- och .winmd-filer för fil- eller konsolutdata.
Alternativ | Description |
---|---|
/metadata[=specifier ] |
Visar metadata, var specifier är:MDHEADER – Visa information och storlekar för metadatarubriken. HEX – Visa information i hex såväl som i ord. CSV – Visa antal poster och heapstorlekar. UNREX – Visa olösta externa. SCHEMA – Visa metadatarubriken och schemainformationen. RAW – Visa råmetadatatabellerna. HEAPS – Visa råa högar. VALIDATE – Verifiera metadatakonsekvensen. Du kan ange /metadata flera gånger med olika värden för specifier . |
Följande alternativ är giltiga för .lib-filer endast för fil- eller konsolutdata.
Alternativ | Description |
---|---|
/objectfile=filename |
Visar metadata för en enskild objektfil i det angivna biblioteket. |
Kommentar
Alla alternativ för Ildasm.exe är skiftlägesokänsliga och känns igen av de tre första bokstäverna. Till exempel motsvarar /quo /quoteallnames. Alternativ som anger argument accepterar antingen ett kolon (:) eller ett likhetstecken (=) som avgränsare mellan alternativet och argumentet. Till exempel /output: filnamn motsvarar /output= filnamn.
Kommentarer
Ildasm.exe fungerar bara på PE-filer på disk. Den fungerar inte på filer som är installerade i den globala sammansättningscacheminnet.
Textfilen som skapas av Ildasm.exe kan användas som indata till IL Assembler (Ilasm.exe). Detta är till exempel användbart när du kompilerar kod på ett programmeringsspråk som inte stöder alla körningsmetadataattribut. När koden har kompilerats och dess utdata har körts via Ildasm.exe kan den resulterande IL-textfilen redigeras för hand för att lägga till de attribut som saknas. Du kan sedan köra den här textfilen via IL Assembler för att skapa en slutlig körbar fil.
Kommentar
För närvarande kan du inte använda den här tekniken med PE-filer som innehåller inbäddad intern kod (till exempel PE-filer som skapats av Visual C++).
Du kan använda standard-GUI i IL Disassembler för att visa metadata och demonterad kod för alla befintliga PE-filer i en hierarkisk trädvy. Om du vill använda GUI skriver du ildasm på kommandoraden utan att ange PEfilename-argumentet eller några alternativ. Från menyn Arkiv kan du navigera till PE-filen som du vill läsa in i Ildasm.exe. Om du vill spara metadata och demonterad kod som visas för den valda PE:en väljer du kommandot Dump på menyn Arkiv . Om du bara vill spara den hierarkiska trädvyn väljer du kommandot Dump Treeview på menyn Arkiv . En detaljerad guide för att läsa in en fil i Ildasm.exe och tolka utdata finns i självstudien Ildasm.exe , som finns i mappen Exempel som levereras med Windows SDK.
Om du anger Ildasm.exe med ett PEfilename-argument som innehåller inbäddade resurser skapar verktyget flera utdatafiler: en textfil som innehåller IL-kod och för varje inbäddad hanterad resurs en .resources-fil som skapas med resursens namn från metadata. Om en ohanterad resurs är inbäddad i PEfilename skapas en .res-fil med det filnamn som anges för IL-utdata med alternativet /output .
Kommentar
Ildasm.exe visar endast metadatabeskrivningar för .obj- och .lib-indatafiler. IL-koden för dessa filtyper är inte demonterad.
Du kan köra Ildasm.exe över an.exe eller .dll fil för att avgöra om filen hanteras. Om filen inte hanteras visar verktyget ett meddelande om att filen inte har något giltigt gemensamt språkkörningshuvud och inte kan demonteras. Om filen hanteras körs verktyget.
Versionsinformation
Från och med .NET Framework 4.5 hanterar Ildasm.exe en okänd marskalksblob (binärt stort objekt) genom att visa det binära råinnehållet. Följande kod visar till exempel hur en blob för marskalk som genereras av ett C#-program visas:
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
Från och med .NET Framework 4.5 visar Ildasm.exe attribut som tillämpas på gränssnittsimplementeringar, enligt följande utdrag från Ildasm.exe utdata:
.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 )
…
Exempel
Följande kommando gör att metadata och demonterad kod för PE-filen MyHello.exe
visas i Ildasm.exe standard-GUI.
ildasm myHello.exe
Följande kommando demonterar filen MyFile.exe
och lagrar den resulterande IL Assembler-texten i filen MyFile.il.
ildasm MyFile.exe /output:MyFile.il
Följande kommando demonterar filen MyFile.exe
och visar den resulterande IL Assembler-texten i konsolfönstret.
ildasm MyFile.exe /text
Om filen MyApp.exe
innehåller inbäddade hanterade och ohanterade resurser genererar följande kommando fyra filer: MyApp.il, MyApp.res, Icons.resources och Message.resources:
ildasm MyApp.exe /output:MyApp.il
Följande kommando demonterar metoden MyMethod
i klassen MyClass
i MyFile.exe
och visar utdata till konsolfönstret.
ildasm /item:MyClass::MyMethod MyFile.exe /text
I föregående exempel kan det finnas flera metoder med namnet MyMethod
med olika signaturer. Följande kommando demonterar instansmetoden MyMethod
med returtypen void och parametertyperna int32 och sträng.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
Kommentar
I .NET Framework-versionerna 1.0 och 1.1 måste den vänstra parentesen som följer metodnamnet balanseras med en högerparentes efter signaturen: MyMethod(instance void(int32))
. Från och med .NET Framework 2.0 måste den avslutande parentesen utelämnas: MyMethod(instance void(int32)
.
Om du vill hämta en static
metod (Shared
-metod i Visual Basic) utelämnar du nyckelordet instance
. Klasstyper som inte är primitiva typer som int32
och string
måste innehålla namnområdet och som måste föregås av nyckelordet class
. Externa typer måste föregås av biblioteksnamnet inom hakparenteser. Följande kommando demonterar en statisk metod med namnet MyMethod
som har en parameter av typen AppDomain och har en returtyp av AppDomain.
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
En kapslad typ måste föregås av dess innehållande klass, avgränsad med ett snedstreck. Om MyNamespace.MyClass
klassen till exempel innehåller en kapslad klass med namnet NestedClass
identifieras den kapslade klassen enligt följande: class MyNamespace.MyClass/NestedClass
.