Sdílet prostřednictvím


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é #includejsou 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 keyFilesouboru .
/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 stackSizehodnotu .
/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

Viz také