Dela via


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 Dumpmenyn Arkiv . Om du bara vill spara den hierarkiska trädvyn väljer du kommandot Dump Treeviewmenyn 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 NestedClassidentifieras den kapslade klassen enligt följande: class MyNamespace.MyClass/NestedClass.

Se även