Ilasm.exe (IL Assembler)
Il Assembler generuje přenosný spustitelný soubor (PE) ze sestavení intermediate language (IL). (Další informace o IL najdete v tématu Proces spravovaného spuštění.) Spuštěním výsledného spustitelného souboru, který obsahuje il a požadovaná metadata, můžete zjistit, 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.
V příkazovém řádku zadejte následující:
Syntaxe
ilasm [options] filename [[options]filename...]
Parametry
Argument | Description |
---|---|
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.exeje možné 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 určenou v integer nt Optional hlavičky. Je-li v souboru zadána direktiva IL .alignment, tato možnost ji přepisuje. |
/appcontainer | Vytvoří .dll nebo .exe soubor, který běží v kontejneru aplikací pro Windows jako výstup. |
/Rameno | Určí jako cílový procesor architekturu Advanced RISC Machine (ARM). Pokud není bitová kopie zadána, výchozí hodnota je /32bitpreferred. |
/Základní:integer |
Nastaví ImageBase na hodnotu určenou parametrem 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 konkrétních operací, které následují. Spuštění: Načítá se a otevře soubor. Generování MD: Generování metadat. Odkaz na Def Resolution: Překlad odkazů na definice v souboru. CEE File Generation: 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žije 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. |
/Knihovny 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í. |
/Příznaky:integer |
Nastaví ImageFlags na hodnotu určenou v integer 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 části CorHdr.h, COMIMAGE_FLAGS. |
/Složit | 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.) |
/Zahrnout:includePath |
Nastaví cestu pro hledání souborů zahrnutých v #include . |
/Itanium | Určí jako cílový procesor Intel Itanium. Pokud není bitová verze obrázku zadaná, výchozí hodnota je /pe64. |
/Klíč:keyFile |
Zkompiluje filename se silným podpisem pomocí privátního klíče obsaženého v keyFile . |
/Klíč: @keySource |
filename Zkompiluje se silným podpisem pomocí privátního klíče vytvořeného na adrese keySource . |
/Výpis | 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 streamu metadat, kde major a minor jsou celá čísla. |
/noautoinherit | Zakáže výchozí dědičnost z, Object pokud 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í přípona se.dll. Poznámka: Zadání /output:myfile.dll nenastaví možnost /dll . Pokud nezadáte /dll, bude výsledkem spustitelný soubor s názvemmyfile.dll. |
/Optimalizovat | Optimalizuje dlouhé instrukce na krátké. Například br do .br.s |
/pe64 | Vytvoří 64bitovou kopii (PE32+). Pokud není zadaný žádný cílový procesor, výchozí hodnota je /itanium . |
/Pdb | Vytvoří soubor PDB bez povolení sledování informací o ladění. |
/Tichý | 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íku:stackSize |
Nastaví hodnotu SizeOfStackReserve v volitelné hlavičce NT na stackSize . |
/stripreloc | Určuje, že není zapotřebí žádné přemisťování základu. |
/Subsystému:integer |
Nastaví subsystém na hodnotu určenou v integer hlavičce NT Optional . Je-li v souboru zadána direktiva IL .subsystem, tento příkaz ji přepíše. Seznam platných hodnot pro najdete v integer tématu winnt.h, IMAGE_SUBSYSTEM . |
/x64 | Určí jako cílový procesor 64bitový procesor společnosti AMD. Pokud není bitová verze obrázku zadaná, výchozí hodnota je /pe64. |
/? | Zobrazí syntaxi příkazu a možnosti nástroje. |
Poznámka
Všechny možnosti proIlasm.exe nerozlišují malá a velká písmena a rozpoznávají se podle prvních tří písmen. Například /lis je ekvivalentem /listing a /res:myresfile.res je ekvivalentem /resource:myresfile.res. Možnosti, které určují argumenty, přijímají dvojtečku (:) nebo rovnítko (=) jako oddělovač mezi parametrem a argumentem. Například /output:file.ext je ekvivalentem /output=file.ext.
Poznámky
Nástroj IL Assembler pomáhá dodavatelům nástrojů navrhovat a implementovat generátory IL. Pomocí Ilasm.exese vývojáři nástrojů a kompilátorů můžou 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, například 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 byl spravovaný kód napsaný v libovolném z těchto programovacích jazyků 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 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 přes Ildasm.exeje možné 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 bylo toto kombinované použití Ildasm.exe a Ilasm.exe co nejpřesnější, assembler ve výchozím nastavení nenahrazuje krátká kódování za dlouhá kódování, která jste napsali ve zdrojích IL (nebo která mohou být generována jiným kompilátorem). Pokud je to možné, použijte možnost /optimize k nahrazení krátkých kódování.
Poznámka
Ildasm.exe funguje jenom se soubory na disku. Nepracuje se soubory nainstalovanými do globální mezipaměti sestavení.
Další informace o gramatice jazyka IL najdete v souboru asmparse.grammar v sadě Windows SDK.
Informace o verzi
Počínaje rozhraním .NET Framework 4.5 můžete k implementaci rozhraní připojit vlastní atribut 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 určit objekt BLOB libovolného zařazování (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 gramatice jazyka IL najdete v souboru asmparse.grammar v sadě Windows SDK.
Příklady
Následující příkaz sestaví soubor IL myTestFile.il a vytvoří spustitelný soubormyTestFile.exe.
ilasm myTestFile
Následující příkaz sestaví myTestFile.il souboru IL a vytvoří .dll soubor myTestFile.dll.
ilasm myTestFile /dll
Následující příkaz sestaví myTestFile.il souboru IL a vytvoří .dll soubor myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
Následující příklad kódu ukazuje velmi jednoduchou aplikaci, která v konzole zobrazí "Hello World!". Tento kód můžete zkompilovat a pak pomocí nástrojeIldasm.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. V příkladech kódu IL i C# se v konzole zobrazí "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
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro