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 keyFile található titkos kulcsot használva. |
/Kulcs: @keySource |
Erős aláírással fordítja filename le a következő helyen keySource lé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: br br.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 integer listá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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: