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 integerté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é