Ilasm.exe (IL-összeszerelő)

Az IL-összeállító egy hordozható végrehajtható (PE) fájlt hoz létre a köztes nyelvű (IL) szerelvényből. (További információ az IL-ről: Felügyelt végrehajtási folyamat.) Futtathatja az eredményül kapott végrehajtható fájlt, 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 működik-e.

Ez az eszköz automatikusan telepítve van 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:

Syntax

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

Paraméterek

Argumentum Leírás
filename A .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.
Lehetőség Leírás
/32bitpreferred 32 bites előnyben részesített rendszerképet (PE32) hoz létre.
/igazítás:integer A FileAlignment értékét az NT Opcionális fejlécben megadott integer értékre állítja. Ha a fájlban meg van adva a .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épbit, az alapértelmezett érték a /32bitpreferred.
/alap:integer Az ImageBase beállítása az NT Opcionális fejlécben megadott integer értékre. Ha a fájlban meg van adva a .imagebase IL-irányelv, ez a beállítás felülírja azt.
/óra Ezredmásodpercben méri és jelenti a következő fordítási időt a megadott .il forrásfájlhoz:

Teljes futtatás: Az összes követett 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.

Ref to Def Resolution: A fájl definícióira mutató hivatkozások feloldása.

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

PE-fájl írása: A kép írása egy 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.

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

OPT lehetővé teszi a JIT optimalizálását, és implicit szekvenciapontokat használ.
/DLL Kimenetként létrehoz egy .dll fájlt.
/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 használatra nem támogatott.
/exe Kimenetként végrehajtható fájlt hoz létre. 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 lásd: CorHdr.h, COMIMAGE_FLAGS.
/szeres Azonos metódustesteket hajt egybe.
/ highentropyva Olyan kimenetet 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ájlokat tartalmazó kereséshez #include.
/itanium Az Intel Itaniumot adja meg célprocesszorként.

Ha nincs megadva képbit, az alapértelmezett érték a /pe64.
/kulcs:keyFile filename Erős aláírással, a benne található keyFiletitkos kulccsal áll össze.
/kulcs: @keySource filename Erős aláírással, a következő helyen keySourcelétrehozott titkos kulccsal áll össze: .
/szövetszegély 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 amelyek egész számok.
/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.
/hozam:file.ext Megadja a kimeneti fájl nevét és bővítményé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 megadja a /dll beállítást, az alapértelmezett bővítmény .dll. Megjegyzés: A /output megadása:myfile.dll nem állítja be a /dll beállítást. Ha nem adja meg a /dll értéket, az eredmény egy myfile.dll nevű végrehajtható fájl lesz.
/optimalizál Rövidre optimalizálja a hosszú utasításokat. Például: brbr.s.
/pe64 64 bites rendszerképet hoz létre (PE32+).

Ha nincs megadva célprocesszor, az alapértelmezett érték az /itanium.
/pdb Létrehoz egy PDB-fájlt a hibakeresési információk nyomon követése nélkül.
/halk 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.
/boglya:stackSize A SizeOfStackReserve értéket az NT Opcionális fejlécben a következőre stackSizeállítja: .
/stripreloc Megadja, hogy nincs szükség alapáthelyezésre.
/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 .alrendszer IL-irányelve, ez a parancs felülírja azt. A winnt.h, IMAGE_SUBSYSTEM a érvényes értékeinek integerlistáját lásd: winnt.h, IMAGE_SUBSYSTEM.
/x64 Célprocesszorként egy 64 bites AMD-processzort ad meg.

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

Feljegyzé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 és a /res:myresfile.res egyenértékű a /resource:myresfile.res fájlokkal. Az argumentumokat meghatározó beállítások kettőspontot (:) vagy egyenlőségjelet (=) fogadnak el elválasztóként a lehetőség és az argumentum között. A /output:file.ext például =

Megjegyzések

Az IL-összeszerelő segít a szerszámgyártóknak IL-generátorok tervezésében és megvalósításában. Az Ilasm.exe használatával az eszköz- és fordítófejlesztők anélkül összpontosíthatnak az IL és a metaadatok létrehozására, hogy a PE-fájlformátumban az IL-t bocsátanák ki.

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

Az IL-összeállító a futtatókörnyezetet megcélozó 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 Ilasm.exe segítségével fordítható le.

Feljegyzé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ég 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 olyan szövegfájlt, amely alkalmas a Ilasm.exe bemenetére. Ez például akkor hasznos, ha olyan programozási nyelven állít össze kódot, amely nem támogatja az összes futtatókörnyezeti metaadat-attribútumot. A kód összeállítása és a kimenet Ildasm.exe keresztü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 a 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.

Feljegyzé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 Ilasm.exe együttes használatának lehető legpontosabbá tétele érdekében az összeszerelő alapértelmezés szerint nem helyettesíti a rövid kódolásokat olyan hosszúakra, amelyeket az IL-forrásokban írt (vagy amelyeket egy másik fordító bocsát ki). A /optimize lehetőséggel helyettesítse a rövid kódolásokat, ahol csak lehetséges.

Feljegyzé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 tekintse meg az asmparse.grammar fájlt a Windows SDK-ban.

Verzióadatok

A .NET-keretrendszer 4.5-től kezdve az alábbi kóddal csatolhat egy egyéni attribútumot 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 marshal BLOB-t (bináris nagy objektumot) nyers bináris ábrázolásával, ahogyan az az alábbi kódban látható:

.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 tekintse meg az asmparse.grammar fájlt a Windows SDK-ban.

Példák

Az alábbi parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a végrehajtható myTestFile.exe.

ilasm myTestFile

Az alábbi parancs összeállítja az IL-fájlt myTestFile.il , és létrehozza a .dll fájlt myTestFile.dll.

ilasm myTestFile /dll

Az alábbi 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 il-fájlt hozhat létre.

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áiban a "„Helló világ!” alkalmazás!" jelenik 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