Ilasm.exe (IL Assemblyer)
De IL Assemblyer genereert een draagbaar uitvoerbaar (PE)-bestand op basis van een tussenliggende taalassembly (IL). (Zie voor meer informatie over IL Beheerd uitvoeringsproces.) U kunt het resulterende uitvoerbare bestand, dat IL en de vereiste metagegevens bevat, uitvoeren om te bepalen of de IL naar verwachting wordt uitgevoerd.
Dit hulpprogramma wordt automatisch geïnstalleerd met Visual Studio. Als u het hulpprogramma wilt uitvoeren, gebruikt u de Visual Studio Developer-opdrachtprompt of Visual Studio Developer PowerShell.
Typ het volgende bij de opdrachtprompt:
Syntaxis
ilasm [options] filename [[options]filename...]
Parameters
Argument | Beschrijving |
---|---|
filename |
De naam van het .il-bronbestand. Dit bestand bestaat uit instructies voor declaratie van metagegevens en symbolische IL-instructies. U kunt meerdere argumenten voor bronbestanden opgeven om één PE-bestand met Ilasm.exe te produceren. Opmerking: Zorg ervoor dat de laatste regel code in het .il-bronbestand een volgspaties of een eindregelteken bevat. |
Optie | Omschrijving |
---|---|
/32bitpreferred | Hiermee maakt u een 32-bits installatiekopieën (PE32). |
/uitlijning: integer |
Hiermee stelt u FileAlignment in op de waarde die is integer opgegeven in de optionele NT-header. Als de .alignment IL-instructie is opgegeven in het bestand, wordt deze optie overschreven. |
/appcontainer | Produceert als uitvoer een .dll- of .exe-bestand dat wordt uitgevoerd in de Windows-app-container. |
/arm | Hiermee geeft u de Advanced RISC Machine (ARM) als doelprocessor. Als er geen afbeeldingsbitness is opgegeven, is de standaardwaarde /32bitpreferred. |
/base: integer |
Stelt ImageBase in op de waarde die is integer opgegeven in de optionele NT-header. Als de .imagebase IL-instructie is opgegeven in het bestand, wordt deze optie overschreven. |
/klok | Meet en rapporteert de volgende compilatietijden in milliseconden voor het opgegeven .il-bronbestand: Totale uitvoering: de totale tijd die is besteed aan het uitvoeren van alle specifieke bewerkingen die volgen. Opstarten: het bestand laden en openen. MD verzenden: metagegevens verzenden. Verw naar de oplossing van def: verwijzingen naar definities in het bestand omzetten. CEE-bestandsgeneratie: de bestandsinstallatiekopieën in het geheugen genereren. PE-bestand schrijven: de afbeelding naar een PE-bestand schrijven. |
/debug[:IMPL|OPT] | Bevat foutopsporingsgegevens (namen van lokale variabelen en argumenten en regelnummers). Hiermee maakt u een PDB-bestand. /foutopsporing zonder extra waarde schakelt JIT-optimalisatie uit en gebruikt reekspunten uit het PDB-bestand. IMPL schakelt JIT-optimalisatie uit en gebruikt impliciete reekspunten. OPT maakt JIT-optimalisatie mogelijk en maakt gebruik van impliciete reekspunten. |
/Dll | Produceert een .dll-bestand als uitvoer. |
/Enc: file |
Hiermee maakt u delta's voor bewerken en doorgaan op basis van het opgegeven bronbestand. Dit argument is alleen bedoeld voor academisch gebruik en wordt niet ondersteund voor commercieel gebruik. |
/exe | Produceert een uitvoerbaar bestand als uitvoer. Dit is de standaardinstelling. |
/Vlaggen: integer |
Hiermee stelt u ImageFlags in op de waarde die is integer opgegeven in de common Language Runtime-header. Als de IL-instructie .corflags is opgegeven in het bestand, wordt deze optie overschreven. Zie CorHdr.h, COMIMAGE_FLAGS voor een lijst met geldige waarden voor een geheel getal. |
/vouwen | Vouwen identieke methode lichamen in één. |
/highentropyva | Produceert een uitvoerbaar bestand dat ondersteuning biedt voor randomisatie van de indeling van de adresruimte met hoge entropie (ASLR). (Standaard voor /appcontainer.) |
/bevatten: includePath |
Hiermee stelt u een pad in om te zoeken naar bestanden die deel #include uitmaken van . |
/itanium | Hiermee geeft u Intel Itanium als doelprocessor. Als er geen bitheid van de afbeelding is opgegeven, is de standaardwaarde /pe64. |
/sleutel: keyFile |
filename Compileert met een sterke handtekening met behulp van de persoonlijke sleutel in keyFile . |
/sleutel: @keySource |
filename Compileert met een sterke handtekening met behulp van de persoonlijke sleutel die wordt geproduceerd op keySource . |
/Aanbieding | Produceert een lijstbestand op de standaarduitvoer. Als u deze optie weglaat, wordt er geen vermeldingsbestand geproduceerd. Deze parameter wordt niet ondersteund in .NET Framework 2.0 of hoger. |
/mdv: versionString |
Hiermee stelt u de tekenreeks voor de metagegevensversie in. |
/msv: major .minor |
Hiermee stelt u de versie van de metagegevensstroom in, waarbij major en minor zijn gehele getallen. |
/noautoinherit | Schakelt standaardovername uit wanneer Object er geen basisklasse is opgegeven. |
/nocorstub | Onderdrukt het genereren van de CORExeMain-stub. |
/nologo | Onderdrukt de weergave van de opstartbanner van Microsoft. |
/uitvoer: file.ext |
Hiermee geeft u de naam en extensie van het uitvoerbestand. De naam van het uitvoerbestand is standaard hetzelfde als de naam van het eerste bronbestand. De standaardextensie is .exe. Als u de optie /dll opgeeft, wordt de standaardextensie .dll. Opmerking: Als u /output opgeeft:myfile.dll wordt de optie /dll niet ingesteld. Als u /dll niet opgeeft, wordt het resultaat een uitvoerbaar bestand met de naam myfile.dll. |
/optimaliseren | Optimaliseert lange instructies om kort te zijn. Bijvoorbeeld br naar br.s . |
/pe64 | Hiermee maakt u een 64-bits installatiekopieën (PE32+). Als er geen doelprocessor is opgegeven, is de standaardwaarde /itanium . |
/pdb | Hiermee maakt u een PDB-bestand zonder foutopsporingsgegevens bij te houden. |
/rustig | Hiermee geeft u de stille modus; rapporteert de voortgang van de assembly niet. |
/hulpbron: file.res |
Bevat het opgegeven resourcebestand in *.res-indeling in het resulterende .exe - of .dll-bestand . Er kan slechts één RES-bestand worden opgegeven met de optie /resource . |
/ssver: int .int |
Hiermee stelt u het subsysteemversienummer in de optionele NT-header in. Voor /appcontainer en /arm is het minimale versienummer 6.02. |
/stapel: stackSize |
Hiermee stelt u de waarde SizeOfStackReserve in de optionele NT-header in op stackSize . |
/stripreloc | Hiermee geeft u op dat er geen basisverplaatsingen nodig zijn. |
/Subsysteem: integer |
Hiermee stelt u het subsysteem in op de waarde die is integer opgegeven in de optionele NT-header. Als de IL-instructie van het subsysteem is opgegeven in het bestand, wordt deze door deze opdracht overschreven. Zie winnt.h, IMAGE_SUBSYSTEM voor een lijst met geldige waarden voor integer . |
/x64 | Hiermee geeft u een 64-bits AMD-processor op als doelprocessor. Als er geen bitheid van de afbeelding is opgegeven, is de standaardwaarde /pe64. |
/? | Geeft de opdrachtsyntaxis en opties voor het hulpprogramma weer. |
Notitie
Alle opties voor Ilasm.exe zijn hoofdlettergevoelig en herkend door de eerste drie letters. Bijvoorbeeld: /lis is gelijk aan /listing en /res:myresfile.res is gelijk aan /resource:myresfile.res. Opties waarmee argumenten worden opgegeven, accepteren een dubbele punt (:) of een gelijkteken (=) als scheidingsteken tussen de optie en het argument. Bijvoorbeeld: /output:file.ext is gelijk aan /output=file.ext.
Opmerkingen
De IL Assembler helpt leveranciers van hulpprogramma's bij het ontwerpen en implementeren van IL-generatoren. Met behulp van Ilasm.exe kunnen hulpprogramma- en compilerontwikkelaars zich concentreren op IL en het genereren van metagegevens zonder dat ze IL hoeven te verzenden in de PE-bestandsindeling.
Net als bij andere compilers die gericht zijn op de runtime, zoals C# en Visual Basic, produceert Ilasm.exe geen tussenliggende objectbestanden en is er geen koppelingsfase nodig om een PE-bestand te vormen.
De IL Assemblyer kan alle bestaande metagegevens en IL-functies uitdrukken van de programmeertalen die gericht zijn op de runtime. Hierdoor kan beheerde code die in een van deze programmeertalen is geschreven, adequaat worden uitgedrukt in IL Assembler en gecompileerd met Ilasm.exe.
Notitie
Compilatie kan mislukken als de laatste regel code in het .il-bronbestand geen volgspaties of een eindregelteken heeft.
U kunt Ilasm.exe gebruiken in combinatie met het bijbehorende hulpprogramma, Ildasm.exe. Ildasm.exe gebruikt een PE-bestand dat IL-code bevat en maakt een tekstbestand dat geschikt is als invoer voor Ilasm.exe. Dit is bijvoorbeeld handig bij het compileren van code in een programmeertaal die niet alle kenmerken van de runtimemetagegevens ondersteunt. Na het compileren van de code en het uitvoeren van de uitvoer via Ildasm.exe, kan het resulterende IL-tekstbestand met de hand worden bewerkt om de ontbrekende kenmerken toe te voegen. U kunt dit tekstbestand vervolgens uitvoeren via de Ilasm.exe om een definitief uitvoerbaar bestand te produceren.
U kunt deze techniek ook gebruiken om één PE-bestand te produceren van verschillende PE-bestanden die oorspronkelijk zijn gegenereerd door verschillende compilers.
Notitie
Op dit moment kunt u deze techniek niet gebruiken met PE-bestanden die ingesloten systeemeigen code bevatten (bijvoorbeeld PE-bestanden die worden geproduceerd door Visual C++).
Om dit gecombineerde gebruik van Ildasm.exe en Ilasm.exe zo nauwkeurig mogelijk te maken, vervangt de assembly standaard geen korte coderingen voor lange coderingen die u mogelijk hebt geschreven in uw IL-bronnen (of die mogelijk door een andere compiler worden verzonden). Gebruik de optie /optimize om waar mogelijk korte coderingen te vervangen.
Notitie
Ildasm.exe werkt alleen op bestanden op schijf. Het werkt niet op bestanden die zijn geïnstalleerd in de algemene assemblycache.
Zie het bestand asmparse.grammar in de Windows SDK voor meer informatie over de grammatica van IL.
Versie-informatie
Vanaf .NET Framework 4.5 kunt u een aangepast kenmerk koppelen aan een interface-implementatie met behulp van code die vergelijkbaar is met de volgende:
.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 )
…
Vanaf .NET Framework 4.5 kunt u een willekeurige marshal BLOB (binair groot object) opgeven met behulp van de onbewerkte binaire weergave, zoals wordt weergegeven in de volgende code:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Zie het bestand asmparse.grammar in de Windows SDK voor meer informatie over de grammatica van IL.
Voorbeelden
Met de volgende opdracht wordt het IL-bestand myTestFile.il samengesteld en wordt het uitvoerbare myTestFile.exe geproduceerd.
ilasm myTestFile
Met de volgende opdracht wordt het IL-bestand myTestFile.il samengesteld en wordt het .dll-bestand myTestFile.dll geproduceerd.
ilasm myTestFile /dll
Met de volgende opdracht wordt het IL-bestand myTestFile.il samengesteld en wordt het .dll-bestand myNewTestFile.dll geproduceerd.
ilasm myTestFile /dll /output:myNewTestFile.dll
In het volgende codevoorbeeld ziet u een uiterst eenvoudige toepassing die 'Hallo wereld!' weergeeft aan de console. U kunt deze code compileren en vervolgens het hulpprogramma Ildasm.exe gebruiken om een IL-bestand te genereren.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Het volgende IL-codevoorbeeld komt overeen met het vorige C#-codevoorbeeld. U kunt deze code compileren in een assembly met behulp van het hulpprogramma IL Assembler. In zowel IL- als C#-codevoorbeelden wordt 'Hallo wereld!' weergegeven in de console.
// 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