Ildasm.exe (IL Disassembler)

IL Disassembler je doprovodným nástrojem k IL Assembleru (Ilasm.exe). Ildasm.exe přebírá přenositelný spustitelný soubor (PE), který obsahuje kód IL (Intermediate Language), a vytvoří textový soubor vhodný jako vstup pro Ilasm.exe.

Tento nástroj je automaticky nainstalován se sadou Visual Studio. Ke spuštění nástroje použijte Visual Studio Developer Command Prompt nebo Visual Studio Developer PowerShell.

V příkazovém řádku zadejte následující:

Syntaxe

ildasm [options] [PEfilename] [options]

Parametry

Pro soubory.exe, .dll, .obj, .lib a .winmd jsou k dispozici následující možnosti.

Možnost Popis
/out=filename Vytvoří výstupní soubor se zadaným filenameobjektem místo zobrazení výsledků v grafickém uživatelském rozhraní.
/rtf Vytvoří výstup ve formátu RTF (Rich Text Format). Neplatná možnost /text .
/Text Zobrazí výsledky v okně konzoly namísto grafického uživatelského rozhraní nebo výstupního souboru.
/Html Vytvoří výstup ve formátu HTML. Platí pouze s možností /output .
/? Zobrazí syntaxi příkazu a možnosti nástroje.

Pro soubory.exe, .dlla .winmd jsou k dispozici následující další možnosti.

Možnost Popis
/Bajtů Zobrazí skutečné bajty v šestnáctkovém formátu jako komentáře k instrukcím.
/caverbal Vytvoří objekty blob vlastních atributů ve slovním vyjádření. Výchozím nastavením je binární vyjádření.
/linenum Zahrne odkazy do původních zdrojových řádků.
/nobar Potlačí místní okno indikátoru průběhu zpětného překladu.
/noca Potlačí výstup vlastních atributů.
/Projektu Zobrazuje metadata tak, jak se jeví spravovanému kódu, a ne tak, jak se zobrazují v nativním prostředí Windows Runtime. Pokud PEfilename se nejedná o soubor metadat windows (.winmd), nemá tato možnost žádný vliv. Viz Podpora rozhraní .NET Framework pro aplikace pro Windows Store a prostředí Windows Runtime.
/pubonly Zpětně přeloží pouze veřejné typy a členy. Ekvivalent k /visibility:PUB.
/quoteallnames Vloží všechny názvy do jednoduchých uvozovek.
/raweh Zobrazí klauzule zpracování výjimek v nezpracovaném tvaru.
/Zdroj Zobrazí původní zdrojové řádky jako komentáře.
/Tokeny Zobrazí tokeny metadat pro třídy a členy.
/Viditelnost:vis [+vis...] Zpětně přeloží pouze typy nebo členy se zadanou viditelností. Následující hodnoty jsou platné pro vis:

PUB – veřejná

PRI – privátní

FAM – Rodina

ASM – sestavení

FAA – Řada a montáž

FOA – Řada nebo sestava

PsC – privátní rozsah

Definice těchto modifikátorů viditelnosti najdete v tématech MethodAttributes a TypeAttributes.

Následující možnosti jsou platné pouze pro soubory.exe, .dlla .winmd pro výstup souborů nebo konzoly.

Možnost Popis
/Všechny Určuje kombinaci možností /header, /bytes, /stats, /classlist a /tokens .
/classlist Zahrne seznam tříd definovaných v modulu.
/Vpřed Použije dopřednou deklaraci tříd.
/Záhlaví Zahrne do výstupu informace z hlavičky souboru.
/Položky:class [::member [(sig]] V závislosti na zadaných argumentech zpětně přeloží následující:

- Rozebere zadaný classparametr .
- Rozebere zadané member z class.
- Přeloží member se class zadaným podpisem sig. Formát je sig :
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Poznámka V rozhraní .NET Framework verze 1.0 a 1.1 sig musí následovat pravá závorka: (sig). Od Net Framework 2.0 je nutné vynechat pravou závorku: (sig.
/noil Potlačí výstup kódu sestavení jazyka IL.
/Statistiky Vloží statistiky o bitové kopii.
/typelist Vytvoří úplný seznam typů pro zachování řazení typů při přenosu.
/Unicode Použije pro výstup kódování Unicode.
/utf8 Použije pro výstup kódování UTF-8. Výchozím je ANSI.

Následující možnosti jsou platné pouze pro soubory .exe, .dll, .obj, .lib a .winmd pro výstup souborů nebo konzoly.

Možnost Popis
/metadata[=specifier] Zobrazuje metadata, kde specifier je:

MDHEADER – zobrazení informací a velikostí hlaviček metadat.

HEX – zobrazuje informace v šestnáctkovém i slovním formátu.

CSV – zobrazuje počty záznamů a velikosti haldy.

UNREX – zobrazuje nevyřešené externí prvky.

SCHEMA – zobrazí informace o hlavičce a schématu metadat.

RAW – zobrazení nezpracovaných tabulek metadat.

HEAPS – Ukažte syrové houpy.

VALIDATE – ověřte konzistenci metadat.

Můžete zadat /metadata vícekrát s různými hodnotami pro specifier.

Následující možnosti platí pouze pro soubory .lib pro výstup souborů nebo konzoly.

Možnost Popis
/objectfile=filename Zobrazí metadata souboru jednoho objektu v zadané knihovně.

Poznámka

Všechny možnosti proIldasm.exe nerozlišují malá a velká písmena a rozpoznávají se podle prvních tří písmen. Například /quo je ekvivalentem /quoteallnames. Možnosti s argumenty přijímají jako oddělovač mezi možností a argumentem dvojtečku (:) nebo symbol rovná se (=). Například /output:filename je ekvivalentem k /output=název_souboru.

Poznámky

Ildasm.exe funguje jenom se soubory PE na disku. Nepracuje se soubory nainstalovanými do globální mezipaměti sestavení.

Textový soubor vytvořený Ildasm.exe lze použít jako vstup do il assembleru (Ilasm.exe). Toho lze využít například při kompilování kódu v programovacím jazyce, který nepodporuje všechny atributy modulu runtime. Po kompilaci kódu a spuštění výstupu přes Ildasm.exelze výsledný textový soubor IL ručně upravit a přidat chybějící atributy. Poté lze tento textový soubor zpracovat nástrojem IL Assembler a vytvořit konečný spustitelný soubor.

Poznámka

Momentálně nelze tuto techniku použít se soubory PE obsahujícími vložený nativní kód (například PE soubory vytvořené jazykem Visual C++).

Chcete-li zobrazit metadata a zpětně přeložený kód libovolného existujícího souboru PE v hierarchickém stromovém zobrazení, lze použít výchozí grafické uživatelské rozhraní nástroje IL Disassembler. Pokud chcete použít grafické uživatelské rozhraní, zadejte na příkazovém řádku ildasm bez zadání argumentu PEfilename nebo jakýchkoli možností. V nabídce Soubor můžete přejít na soubor PE, který chcete načíst do Ildasm.exe. Pokud chcete uložit metadata a rozebraný kód zobrazený pro vybrané prostředí PE, vyberte příkaz Výpis z nabídky Soubor . Pokud chcete uložit jenom hierarchické stromové zobrazení, vyberte příkaz Výpis stromového zobrazení z nabídky Soubor . Podrobného průvodce načtením souboru do Ildasm.exe a interpretací výstupu najdete v kurzuIldasm.exe , který se nachází ve složce Samples, která se dodává se sadou Windows SDK.

Pokud zadáteIldasm.exe s argumentem PEfilename , který obsahuje vložené prostředky, nástroj vytvoří několik výstupních souborů: textový soubor, který obsahuje kód IL, a pro každý vložený spravovaný prostředek soubor .resources vytvořený pomocí názvu prostředku z metadat. Pokud je nespravovaný prostředek vložený do PEfilename, vytvoří se soubor .res pomocí názvu souboru zadaného pro výstup IL možností /output .

Poznámka

Ildasm.exe zobrazí pouze popisy metadat pro vstupní soubory .obj a .lib . Kód IL není pro tyto typy souborů zpětně překládán.

SpuštěnímIldasm.exe přes soubor an.exe nebo .dll můžete určit, jestli je soubor spravovaný. Není-li soubor spravovaný, nástroj zobrazí zprávu oznamující, že soubor neobsahuje žádnou platnou hlavičku modulu CLR a nelze jej zpětně přeložit. Pokud soubor spravovaný je, nástroj se úspěšně spustí.

Informace o verzi

Počínaje rozhraním .NET Framework 4.5 Ildasm.exe zpracovává nerozpoznaný zařazovaný objekt BLOB (binární velký objekt) zobrazením nezpracovaného binárního obsahu. Následující kód například ukazuje, jak je zobrazen zařazovací objekt BLOB vygenerovaný programem jazyka C#:

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

Počínaje rozhraním .NET Framework 4.5 Ildasm.exe zobrazí atributy, které jsou použity pro implementace rozhraní, jak je znázorněno v následujícím výňatku z výstupuIldasm.exe :

.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 )
      …

Příklady

Následující příkaz způsobí, že se metadata a rozebraný kód souboru MyHello.exe PE zobrazí ve výchozím grafickém uživatelském rozhraníIldasm.exe.

ildasm myHello.exe

Následující příkaz soubor přeloží MyFile.exe a uloží výsledný text assembleru IL do souboru MyFile.il.

ildasm MyFile.exe /output:MyFile.il

Následující příkaz soubor rozebere MyFile.exe a zobrazí výsledný text assembleru IL do okna konzoly.

ildasm MyFile.exe /text

Pokud soubor MyApp.exe obsahuje vložené spravované a nespravované prostředky, vytvoří následující příkaz čtyři soubory: MyApp.il, MyApp.res, Icons.resources a Message.resources:

ildasm MyApp.exe /output:MyApp.il

Následující příkaz rozebere metodu MyMethod v rámci třídy MyClass v MyFile.exe a zobrazí výstup do okna konzoly.

ildasm /item:MyClass::MyMethod MyFile.exe /text

V předchozím příkladu může existovat několik metod s různými MyMethod podpisy. Následující příkaz rozebere metodu MyMethod instance s návratovým typem void a typy parametrů int32 a string.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text

Poznámka

V rozhraní .NET Framework verze 1.0 a 1.1 musí být levá závorka, která následuje za názvem metody, vyvážena pravou závorkou za podpisem: MyMethod(instance void(int32)). Počínaje rozhraním .NET Framework 2.0 musí být vynechána pravá závorka: MyMethod(instance void(int32).

Pokud chcete načíst metodu static (Shared metodu v jazyce Visual Basic), vyněžte klíčové slovo instance. Typy tříd, které nejsou primitivními typy jako int32 a string musí obsahovat obor názvů a musí předcházet klíčové slovo class. Před externími typy musí být uveden název knihovny v hranatých závorkách. Následující příkaz rozebere statickou metodu s názvem MyMethod , která má jeden parametr typu AppDomain a má návratový typ AppDomain.

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

Před vnořeným typem musí být uvedena třída, která jej obsahuje, oddělená lomítkem. Pokud MyNamespace.MyClass například třída obsahuje vnořenou třídu s názvem NestedClass, vnořená třída se identifikuje takto: class MyNamespace.MyClass/NestedClass.

Viz také