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 filename objektem 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ý class parametr .- 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat Problémy GitHubu jako mechanismus zpětné vazby pro obsah a nahradíme ho novým systémem zpětné vazby. Další informace najdete tady:Odeslat a zobrazit názory pro