Ilasm.exe (IL-összeállító)

Az IL-összeállító egy hordozható végrehajtható (PE) fájlt hoz létre a középfokú nyelvi (IL) szerelvényből. (További információ az IL-ről: Felügyelt végrehajtási folyamat.) Az eredményül kapott végrehajtható fájlt futtathatja, amely tartalmazza az IL-t és a szükséges metaadatokat annak megállapításához, hogy az IL a várt módon teljesít-e.

Ez az eszköz automatikusan települ a Visual Studióval. Az eszköz futtatásához használja a Visual Studio fejlesztői parancssorát vagy a Visual Studio Developer PowerShellt.

A parancssorba írja be a következőt:

Szintaxis

ilasm [options] filename [[options]filename...]

Paraméterek

Argumentum Description
filename Az .il forrásfájl neve. Ez a fájl metaadat-deklarációs irányelvekből és szimbolikus IL-utasításokból áll. Több forrásfájlargumentum is megadható egyetlen PE-fájl létrehozásához Ilasm.exe. Megjegyzés: Győződjön meg arról, hogy az .il forrásfájl utolsó kódsora záró szóközzel vagy sorvég karakterrel rendelkezik.
Beállítás Leírás
/32bitpreferred Létrehoz egy 32 bites előnyben részesített rendszerképet (PE32).
/Igazítás:integer A FileAlignment értékét az NT Nem kötelező fejlécben megadott integer értékre állítja. Ha a fájlban meg van adva az .alignment IL direktíva, ez a beállítás felülírja azt.
/appcontainer Kimenetként létrehoz egy .dll vagy .exe fájlt, amely a Windows alkalmazástárolóban fut.
/Kar Célprocesszorként a Speciális RISC-gépet (ARM) adja meg.

Ha nincs megadva képbitesség, az alapértelmezett érték a /32bitpreferred.
/Alap:integer Az ImageBase értékét az NT Opcionális fejlécben megadott integer értékre állítja. Ha a fájlban meg van adva az .imagebase IL direktíva, ez a beállítás felülírja azt.
/Óra A megadott .il forrásfájlhoz tartozó alábbi fordítási időt méri és jelenti ezredmásodpercben:

Teljes futtatás: Az összes következő művelet végrehajtásával töltött teljes idő.

Indítás: A fájl betöltése és megnyitása.

MD kibocsátása: Metaadatok kibocsátása.

A feloldás feloldása: A fájlban lévő definíciókra mutató hivatkozások feloldása.

CEE-fájllétrehozás: A fájlkép létrehozása a memóriában.

PE-fájl írása: A kép írása PE-fájlba.
/debug[:IMPL|OPT] Hibakeresési információkat (helyi változó- és argumentumneveket, valamint sorszámokat) tartalmaz. Létrehoz egy PDB-fájlt.

A további érték nélküli /hibakeresés letiltja a JIT-optimalizálást, és a PDB-fájlból származó szekvenciapontokat használ.

Az IMPL letiltja a JIT-optimalizálást, és implicit szekvenciapontokat használ.

Az OPT lehetővé teszi a JIT-optimalizálást, és implicit szekvenciapontokat használ.
/Dll Kimenetként .dll fájlt hoz létre.
/enc:file Szerkesztési és folytatási különbözeteket hoz létre a megadott forrásfájlból.

Ez az argumentum csak tudományos célú, és kereskedelmi célokra nem támogatott.
/Exe Kimenetként létrehoz egy végrehajtható fájlt. Ez az alapértelmezett beállítás.
/Zászlók:integer Az ImageFlags értékét a közös nyelvi futtatókörnyezet fejlécében megadott integer értékre állítja. Ha a fájlban a .corflags IL direktíva van megadva, ez a beállítás felülírja azt. Az egész szám érvényes értékeinek listáját a CorHdr.h, COMIMAGE_FLAGS című témakörben találja.
/Hajtsa Összecsukja az azonos metódustesteket egybe.
/highentropyva Olyan kimeneti végrehajtható fájlt hoz létre, amely támogatja a nagy entrópiás címtérelrendezést (ASLR). (Az /appcontainer alapértelmezett értéke.)
/Tartalmaz:includePath Beállít egy elérési utat a fájlban található fájlok kereséséhez #include.
/Itanium Az Intel Itaniumot adja meg célprocesszorként.

Ha nincs megadva képbitesség, az alapértelmezett érték a /pe64.
/Kulcs:keyFile Erős aláírással fordítja filename le a fájlban keyFiletalálható titkos kulcsot használva.
/Kulcs: @keySource Erős aláírással fordítja filename le a következő helyen keySourcelétrehozott titkos kulcsot: .
/Listázási Létrehoz egy listafájlt a standard kimeneten. Ha kihagyja ezt a beállítást, a rendszer nem hoz létre listafájlt.

Ez a paraméter nem támogatott a .NET-keretrendszer 2.0-s vagy újabb verziójában.
/mdv:versionString Beállítja a metaadat-verzió sztringet.
/msv:major.minor Beállítja a metaadat-adatfolyam verzióját, ahol major és minor egész számokat is.
/noautoinherit Letiltja az alapértelmezett öröklést, Object ha nincs megadva alaposztály.
/nocorstub Letiltja a CORExeMain csonk létrehozását.
/nologo Letiltja a Microsoft indítási szalagcímének megjelenítését.
/Kimeneti:file.ext Megadja a kimeneti fájl nevét és kiterjesztését. Alapértelmezés szerint a kimeneti fájl neve megegyezik az első forrásfájl nevével. Az alapértelmezett bővítmény a .exe. Ha a /dll beállítást adja meg, az alapértelmezett bővítmény .dll. Megjegyzés: A /output:myfile.dll megadása nem állítja be a /dll beállítást. Ha nem adja meg a /dll értéket, az eredmény egy myfile.dllnevű végrehajtható fájl lesz.
/Optimalizálja Rövidre optimalizálja a hosszú utasításokat. Például: brbr.s.
/pe64 64 bites képet (PE32+) hoz létre.

Ha nincs megadva célprocesszor, az alapértelmezett érték a ./itanium
/Pdb PDB-fájlt hoz létre a hibakeresési információk nyomon követése nélkül.
/quiet Csendes módot ad meg; nem jelenti a szerelvény előrehaladását.
/Erőforrás:file.res *.res formátumban tartalmazza a megadott erőforrásfájlt az eredményként kapott .exe vagy .dll fájlban. Az /resource beállítással csak egy .res fájl adható meg.
/ssver:int.int Beállítja az alrendszer verziószámát az NT opcionális fejlécében. Az /appcontainer és / arm esetében a minimális verziószám 6.02.
/Verem:stackSize Az NT Optional fejléc sizeOfStackReserve értékét a következőre stackSizeállítja: .
/stripreloc Megadja, hogy nincs szükség alapáthelyezésekre.
/Alrendszer:integer Beállítja az alrendszert az NT Opcionális fejlécben megadott integer értékre. Ha a fájlban meg van adva az .subsystem IL direktíva, ez a parancs felülírja azt. Az érvényes értékek integerlistájáért lásd: winnt.h, IMAGE_SUBSYSTEM.
/x64 Célprocesszorként egy 64 bites AMD-processzort ad meg.

Ha nincs megadva képbitesség, az alapértelmezett érték a /pe64.
/? Megjeleníti az eszköz parancsszintaxisát és beállításait.

Megjegyzés

A Ilasm.exe minden lehetősége megkülönbözteti a kis- és nagybetűket, és az első három betű felismeri. A /lis például egyenértékű a /listing értékekkel, a /res:myresfile.res pedig egyenértékű a /resource:myresfile.res fájlokkal. Az argumentumokat meghatározó beállítások kettőspontot fogadnak el (:) vagy egyenlőségjelet (=) a beállítás és az argumentum közötti elválasztóként. A /output:file.ext például egyenértékű a /output=file.ext fájllal.

Megjegyzések

Az IL Assembler segít a szerszámgyártóknak il generátorok tervezésében és megvalósításában. A Ilasm.exehasználatával az eszköz- és fordítófejlesztők az IL- és metaadatok generálásával foglalkozhatnak anélkül, hogy az IL PE-fájlformátumban való kibocsátásával foglalkoznak.

A futtatókörnyezetet megcélzó más fordítókhoz, például a C# és a Visual Basic modulhoz hasonlóan Ilasm.exe nem hoz létre köztes objektumfájlokat, és nem igényel csatolási szakaszt a PE-fájlok létrehozásához.

Az IL-összeállító a futtatókörnyezetet megcélzó programozási nyelvek összes meglévő metaadatát és IL-funkcióját képes kifejezni. Ez lehetővé teszi, hogy az ezen programozási nyelvek bármelyikében írt felügyelt kód megfelelően kifejezhető legyen az IL Assemblerben, és lefordítható legyenIlasm.exehasználatával.

Megjegyzés

A fordítás sikertelen lehet, ha az .il forrásfájl utolsó kódsora nem tartalmaz záró szóközt vagy sorvégi karaktert.

A Ilasm.exe a társeszközével együtt használhatja, Ildasm.exe. Ildasm.exe egy IL-kódot tartalmazó PE-fájlt vesz fel, és létrehoz egy, aIlasm.exebemenetének megfelelő szövegfájlt. Ez például akkor hasznos, ha olyan programozási nyelven állít össze kódot, amely nem támogatja az összes futásidejű metaadat-attribútumot. A kód fordítása és a kimenet Ildasm.exekeresztüli futtatása után az eredményül kapott IL-szövegfájl kézzel szerkeszthető a hiányzó attribútumok hozzáadásához. Ezután futtathatja ezt a szövegfájlt a Ilasm.exe egy végleges végrehajtható fájl létrehozásához.

Ezzel a technikával egyetlen PE-fájlt is létrehozhat több, eredetileg különböző fordítók által létrehozott PE-fájlból.

Megjegyzés

Jelenleg nem használhatja ezt a technikát beágyazott natív kódot tartalmazó PE-fájlokkal (például a Visual C++által létrehozott PE-fájlokkal).

A Ildasm.exe és aIlasm.exe együttes használatának lehető legpontosabbá tétele érdekében a szerelvény alapértelmezés szerint nem helyettesíti a rövid kódolásokat az IL-forrásokban esetleg írt hosszú kódolások helyett (vagy amelyeket egy másik fordító bocsát ki). A /optimize lehetőséggel lehetőség szerint helyettesítheti a rövid kódolásokat.

Megjegyzés

Ildasm.exe csak lemezen lévő fájlokon működik. Nem működik a globális szerelvény-gyorsítótárban telepített fájlokon.

Az IL nyelvhelyességével kapcsolatos további információkért lásd a Windows SDK asmparse.grammar fájlját.

Verzióadatok

A .NET-keretrendszer 4.5-től kezdve az alábbihoz hasonló kóddal csatolhat egyéni attribútumokat egy felületi implementációhoz:

.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 )
      …

A .NET-keretrendszer 4.5-től kezdődően megadhat egy tetszőleges marsall BLOB-t (bináris nagy objektumot) nyers bináris ábrázolásával, az alábbi kódban látható módon:

.method public hidebysig abstract virtual
        instance void
        marshal({ 38 01 02 FF })
        Test(object A_1) cil managed

Az IL nyelvhelyességével kapcsolatos további információkért lásd a Windows SDK asmparse.grammar fájlját.

Példák

A következő parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a végrehajtható myTestFile.exe.

ilasm myTestFile

A következő parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a .dll fájlt myTestFile.dll.

ilasm myTestFile /dll

A következő parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a .dll fájlt myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

Az alábbi példakód egy rendkívül egyszerű alkalmazást mutat be, amely a ""Helló világ!" alkalmazás!" szöveget jeleníti meg a konzolon. Ezt a kódot lefordíthatja, majd az Ildasm.exe eszközzel létrehozhat egy IL-fájlt.

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Az alábbi IL-kód példa az előző C#-kód példájának felel meg. Ezt a kódot egy szerelvénybe fordíthatja az IL Assembler eszközzel. Az IL és a C#-kód példái is a ""Helló világ!" alkalmazás!" szöveget jelenítik meg a konzolon.

// 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

Lásd még