Ildasm.exe (IL Disassembler)

IL Disassembler je doprovodný nástroj k assembleru IL (Ilasm.exe). Ildasm.exe vezme přenosný 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.

Na 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 filenamesouborem místo zobrazení výsledků v grafickém uživatelském rozhraní.
/rtf Vytvoří výstup ve formátu RTF (Rich Text Format). Neplatné s 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. Platné pouze s možností /output .
/? Zobrazí syntaxi příkazu a možnosti nástroje.

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

Možnost Popis
/byty 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ů.
/projekt Zobrazuje metadata, jak se zdá spravovaný kód, a ne tak, jak se zobrazuje v nativním prostředí Windows Runtime. Pokud PEfilename není soubor metadat windows (.winmd), tato možnost nemá žá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 / 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.
/odznaky Zobrazí tokeny metadat pro třídy a členy.
/visibility: 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 – soukromé

FAM – Rodina

ASM – sestavení

FAA – Rodina a sestavení

FOA – rodina nebo sestavení

PSC – privátní obor

Definice těchto modifikátorů viditelnosti naleznete MethodAttributes a TypeAttributes.

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

Možnost Popis
/všichni 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.
/hlavičky Zahrne do výstupu informace z hlavičky souboru.
/item: class[:: member[(sig]] V závislosti na zadaných argumentech zpětně přeloží následující:

- Rozebere zadaný class.
- Rozebere zadaný parametr member class.
- Rozebere member s class určeným podpisem sig. Formát sig je následující:
[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). Počínaje rozhraním Net Framework 2.0 je nutné vynechat pravou závorku: (sig.
/noil Potlačí výstup kódu sestavení jazyka IL.
/statistické údaje 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é jenom pro soubory .exe, .dll, .obj, .lib a .winmd .

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

MDHEADER – Zobrazí informace a velikosti záhlaví metadat.

HEX – zobrazit informace v šestnáctkovém i slově.

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

UNREX – Zobrazení nevyřešených externích objektů

SCHÉMA – Umožňuje zobrazit hlavičku metadat a informace o schématu.

RAW – Zobrazí nezpracované tabulky metadat.

HEAPS - Ukaž nezpracované haldy.

VALIDATE – Ověřte konzistenci metadat.

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

Následující možnosti jsou platné pouze pro soubory .lib pro soubor nebo výstup konzoly.

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

Poznámka:

Všechny možnosti Ildasm.exe nerozlišují malá a velká písmena a rozpoznávají první tři písmena. Například /quo je ekvivalentní /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: název souboru je ekvivalentní souboru /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 assembleru IL (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 prostřednictvím Ildasm.exe můžete 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 do souboru PE, který chcete načíst do Ildasm.exe. Chcete-li uložit metadata a rozebrat kód zobrazený pro vybrané prostředí PE, vyberte příkaz Výpis paměti z nabídky Soubor . Chcete-li uložit pouze hierarchické stromové zobrazení, vyberte příkaz Dump Treeview z nabídky Soubor . Podrobný průvodce načtením souboru do Ildasm.exe a interpretací výstupu najdete v kurzu Ildasm.exe , který se nachází ve složce Samples, která je součástí sady Windows SDK.

Pokud zadáte Ildasm.exe s argumentem PEfilename , který obsahuje vložené prostředky, nástroj vytvoří více výstupních souborů: textový soubor obsahující 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 souboru PEfilename, vytvoří se soubor .res pomocí názvu souboru určeného pro výstup IL pomocí možnosti /output .

Poznámka:

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

Můžete spustit Ildasm.exe přes an.exe nebo .dll soubor a 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ý objekt BLOB zařazování (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 použité pro implementace rozhraní, jak je znázorněno v následujícím výňatku z Ildasm.exe výstupu:

.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 rozložený kód souboru MyHello.exe PE zobrazí v Ildasm.exe výchozím grafickém uživatelském rozhraní.

ildasm myHello.exe

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

ildasm MyFile.exe /output:MyFile.il

Následující příkaz soubor MyFile.exe rozebere a zobrazí výsledný text jazyka IL Assembler 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 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 pojmenovaných MyMethod s různými 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í 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 je nutné vynechat pravou závorku: MyMethod(instance void(int32).

Chcete-li načíst metodu static (Shared metoda v jazyce Visual Basic), vynechá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ý AppDomaintyp .

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 například MyNamespace.MyClass třída obsahuje vnořenou třídu s názvem NestedClass, vnořená třída je identifikována takto: class MyNamespace.MyClass/NestedClass.

Viz také