Ilasm.exe (IL Assembler)
Il Assembler vygeneruje přenosný spustitelný soubor (PE) ze sestavení IL (Intermediate Language). (Další informace o IL najdete v tématu Spravovaný proces provádění.) Můžete spustit výsledný spustitelný soubor, který obsahuje il a požadovaná metadata, a určit, jestli il funguje podle očekávání.
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
ilasm [options] filename [[options]filename...]
Parametry
Argument | Popis |
---|---|
filename |
Název zdrojového souboru .il. Soubor sestává z deklaračních direktiv metadat a symbolických instrukcí IL. K vytvoření jednoho souboru PE s Ilasm.exe lze zadat více argumentů zdrojového souboru. Poznámka: Ujistěte se, že poslední řádek kódu ve zdrojovém souboru .il obsahuje koncové prázdné znaky nebo znak konce řádku. |
Možnost | Popis |
---|---|
/32bitpreferred | Vytvoří bitovou kopii s upřednostněním 32bitového kódu (PE32). |
/zarovnání: integer |
Nastaví FileAlignment na hodnotu zadanou integer v hlavičce NT Optional. Je-li v souboru zadána direktiva IL .alignment, tato možnost ji přepisuje. |
/appcontainer | Vytvoří soubor .dll nebo .exe, který se spouští v kontejneru aplikací pro Windows jako výstup. |
/paže | Určí jako cílový procesor architekturu Advanced RISC Machine (ARM). Pokud není zadána žádná bitová verze obrázku, výchozí hodnota je /32bitpreferred. |
/základna: integer |
Nastaví ImageBase na hodnotu zadanou integer v hlavičce NT Optional. Je-li v souboru zadána direktiva IL .imagebase, tato možnost ji přepisuje. |
/hodiny | Měří a oznamuje následující časy kompilace v milisekundách pro zadaný zdrojový soubor .il: Celkový počet spuštění: Celkový čas strávený prováděním všech následujících konkrétních operací. Spuštění: Načítá se a otevírá soubor. Generování MD: Generování metadat Ref to Def Resolution: Překlad odkazů na definice v souboru. CEE Generování souborů: Generování obrázku souboru v paměti. Zápis souboru PE: Zápis obrázku do souboru PE |
/debug[:IMPL|OPT] | Zahrnuje informace o ladění (názvy místních proměnných a argumentů a čísla řádků). Vytvoří soubor PDB. /debug bez další hodnoty zakáže optimalizaci JIT a používá body sekvence ze souboru PDB. IMPL zakáže optimalizaci JIT a používá implicitní sekvenční body. OPT umožňuje optimalizaci JIT a používá implicitní sekvenční body. |
/knihovna dll | Vytvoří .dll soubor jako výstup. |
/Enc: file |
Vytvoří ze zadaného zdrojového souboru rozdíly pro funkci Upravit a pokračovat. Tento argument slouží pouze k akademickému použití a při komerčním použití není podporován. |
/exe | Vytvoří jako výstup spustitelný soubor. Tato možnost je výchozí. |
/vlajky: integer |
Nastaví ImageFlags na hodnotu zadanou integer v hlavičce modulu CLR (Common Language Runtime). Je-li v souboru zadána direktiva IL .corflags, tato možnost ji přepisuje. Seznam platných hodnot pro celé číslo najdete v tématu CorHdr.h, COMIMAGE_FLAGS. |
/ohyb | Sloučí identická těla metod do jednoho. |
/highentropyva | Vytvoří výstupní spustitelný soubor podporující funkci ASLR s vysokou entropií. (Výchozí hodnota pro /appcontainer.) |
/zahrnovat: includePath |
Nastaví cestu pro hledání souborů, které #include jsou součástí . |
/itanium | Určí jako cílový procesor Intel Itanium. Pokud není zadána žádná bitová verze obrázku, výchozí hodnota je /pe64. |
/klíč: keyFile |
Zkompiluje filename se silným podpisem pomocí privátního klíče obsaženého v keyFile souboru . |
/klíč: @keySource |
Zkompiluje filename se silným podpisem pomocí privátního klíče vytvořeného na adrese keySource . |
/soupis | Vytvoří na standardním výstupu soubor výpisu. Vynecháte-li tuto možnost, není vytvořen žádný soubor výpisu. Tento parametr není podporován v rozhraní .NET Framework 2.0 a vyšším. |
/mdv: versionString |
Nastaví řetězec verze metadat. |
/msv: major .minor |
Nastaví verzi datového proudu metadat, kde major a minor jsou celá čísla. |
/noautoinherit | Zakáže výchozí dědičnost, pokud Object není zadána žádná základní třída. |
/nocorstub | Potlačí generování zástupné procedury CORExeMain. |
/nologo | Potlačí zobrazení úvodního nápisu společnosti Microsoft. |
/výstup: file.ext |
Určuje název výstupního souboru a příponu. Ve výchozím nastavení je název výstupního souboru shodný s názvem prvního zdrojového souboru. Výchozí rozšíření je .exe. Pokud zadáte možnost /dll , výchozí rozšíření je .dll. Poznámka: Zadání /output:myfile.dll nenastaví možnost /dll. Pokud nezadáte /dll, výsledkem bude spustitelný soubor s názvem myfile.dll. |
/optimize | Optimalizuje dlouhé instrukce na krátké. Například br na br.s . |
/pe64 | Vytvoří 64bitovou kopii (PE32+). Pokud není zadán žádný cílový procesor, výchozí hodnota je /itanium . |
/pdb | Vytvoří soubor PDB bez povolení sledování informací o ladění. |
/quiet | Určuje tichý režim, který neoznamuje průběh sestavení. |
/zdroj: file.res |
Zahrne zadaný soubor prostředků ve formátu *.res do výsledného .exe nebo .dll souboru. Pomocí možnosti /resource lze zadat pouze jeden soubor .res. |
/ssver: int .int |
Nastaví číslo verze podsystému ve volitelné hlavičce NT. Pro /appcontainer a /arm je minimální číslo verze 6.02. |
/zásobník: stackSize |
Nastaví hodnotu SizeOfStackReserve v hlavičce NT Optional na stackSize hodnotu . |
/stripreloc | Určuje, že není zapotřebí žádné přemisťování základu. |
/podsystém: integer |
Nastaví podsystém na hodnotu zadanou integer v hlavičce NT Optional. Je-li v souboru zadána direktiva IL .subsystem, tento příkaz ji přepíše. Viz winnt.h, IMAGE_SUBSYSTEM seznam platných hodnot pro integer . |
/x64 | Určí jako cílový procesor 64bitový procesor společnosti AMD. Pokud není zadána žádná bitová verze obrázku, výchozí hodnota je /pe64. |
/? | Zobrazí syntaxi příkazu a možnosti nástroje. |
Poznámka:
Všechny možnosti Ilasm.exe nerozlišují malá a velká písmena a rozpoznávají první tři písmena. Například /lis je ekvivalentní /listing a /res:myresfile.res je ekvivalentní /resource:myresfile.res. Možnosti, které určují argumenty, přijímají jako oddělovač mezi možností a argumentem dvojtečku (:) nebo rovnítko (=). Například /output:file.ext je ekvivalentní /output=file.ext.
Poznámky
Nástroj IL Assembler pomáhá dodavatelům nástrojů navrhovat a implementovat generátory IL. Pomocí Ilasm.exe se mohou vývojáři nástrojů a kompilátorů soustředit na generování IL a metadat, aniž by se museli zabývat generováním il ve formátu souboru PE.
Podobně jako jiné kompilátory, které cílí na modul runtime, jako je C# a Visual Basic, Ilasm.exe nevytváří zprostředkující soubory objektů a nevyžaduje fázi propojení pro vytvoření souboru PE.
Nástroj IL Assembler dokáže vyjádřit všechna existující metadata a funkce IL programovacích jazyků zaměřených na modul runtime. To umožňuje, aby spravovaný kód napsaný v některém z těchto programovacích jazyků byl adekvátně vyjádřen v assembleru IL a zkompilován pomocí Ilasm.exe.
Poznámka:
Kompilace může skončit neúspěchem, neobsahuje-li poslední řádek kódu ve zdrojovém souboru .il prázdný znak nebo znak ukončení řádku.
Ilasm.exe můžete použít ve spojení s jeho doprovodným nástrojem Ildasm.exe. Ildasm.exe vezme soubor PE, který obsahuje kód IL a vytvoří textový soubor vhodný jako vstup pro 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. Tento textový soubor pak můžete spustit prostřednictvím Ilasm.exe a vytvořit konečný spustitelný soubor.
Tuto techniku lze také použít pro sloučení několika souborů PE původně vygenerovaných různými kompilátory do jediného souboru PE.
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++).
Aby se toto kombinované použití Ildasm.exe a Ilasm.exe co nejpřesněji, assembler ve výchozím nastavení nenahrazuje krátké kódování pro dlouhé kódování, které jste mohli napsat ve svých zdrojích IL (nebo které může být generováno jiným kompilátorem). Možnost /optimize použijte k nahrazení krátkých kódování, kdykoli je to možné.
Poznámka:
Ildasm.exe funguje jenom na souborech na disku. Nepracuje se soubory nainstalovanými do globální mezipaměti sestavení.
Další informace o gramatikě IL naleznete v souboru asmparse.grammar v sadě Windows SDK.
Informace o verzi
Počínaje rozhraním .NET Framework 4.5 můžete připojit vlastní atribut k implementaci rozhraní pomocí kódu podobného následujícímu:
.class interface public abstract auto ansi IMyInterface
{
.method public hidebysig newslot abstract virtual
instance int32 method1() cil managed
{
} // end of method IMyInterface::method1
} // end of class IMyInterface
.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 )
…
Počínaje rozhraním .NET Framework 4.5 můžete zadat libovolný zařazování objektu BLOB (binární velký objekt) pomocí jeho nezpracované binární reprezentace, jak je znázorněno v následujícím kódu:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Další informace o gramatikě IL naleznete v souboru asmparse.grammar v sadě Windows SDK.
Příklady
Následující příkaz sestaví soubor IL myTestFile.il a vytvoří spustitelný myTestFile.exe.
ilasm myTestFile
Následující příkaz sestaví soubor IL myTestFile.il a vytvoří soubor .dll myTestFile.dll.
ilasm myTestFile /dll
Následující příkaz sestaví soubor IL myTestFile.il a vytvoří soubor .dll myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
Následující příklad kódu ukazuje extrémně jednoduchou aplikaci, která zobrazí "Hello World!" v konzole. Tento kód můžete zkompilovat a pak pomocí nástroje Ildasm.exe vygenerovat soubor IL.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Následující příklad kódu IL odpovídá předchozí ukázce kódu C#. Tento kód můžete zkompilovat do sestavení pomocí nástroje IL Assembler. Příklady kódu IL i C# zobrazují v konzole text "Hello World!".
// Metadata version: v2.0.50215
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly sample
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module sample.exe
// MVID: {A224F460-A049-4A03-9E71-80A36DBBBCD3}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x02F20000
// =============== CLASS MEMBERS DECLARATION ===================
.class public auto ansi beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Hello::Main
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Hello::.ctor
} // end of class Hello