Ilasm.exe (IL Assembler)
De IL Assembler genereert een portable executable (PE)-bestand op basis van een TUSSENliggende taalassembly (IL). (Zie Managed Execution Process (Beheerd uitvoeringsproces) voor meer informatie over IL.) U kunt het resulterende uitvoerbare bestand, dat IL en de vereiste metagegevens bevat, uitvoeren om te bepalen of de IL werkt zoals verwacht.
Dit hulpprogramma wordt automatisch geïnstalleerd met Visual Studio. Als u het hulpprogramma wilt uitvoeren, gebruikt u 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. Er kunnen meerdere bronbestandsargumenten worden opgegeven om één PE-bestand te produceren met Ilasm.exe. Opmerking: Zorg ervoor dat de laatste regel code in het .il-bronbestand een volgspaties of een regeleindeteken heeft. |
Optie | Beschrijving |
---|---|
/32bitpreferred | Hiermee maakt u een 32-bits voorkeursinstallatiekopieën (PE32). |
/Uitlijning:integer |
Hiermee stelt u FileAlignment in op de waarde die is opgegeven door integer in de NT Optional-header. Als de .alignment IL-instructie is opgegeven in het bestand, wordt deze door deze optie overschreven. |
/appcontainer | Produceert een .dll - of .exe-bestand dat als uitvoer wordt uitgevoerd in de Windows-app-container. |
/Arm | Hiermee geeft u de Advanced RISC Machine (ARM) als de doelprocessor. Als er geen bitness van de installatiekopieën is opgegeven, is de standaardwaarde /32bitpreferred. |
/Base:integer |
Hiermee stelt u ImageBase in op de waarde die is opgegeven door integer in de NT Optional-header. Als de .imagebase IL-instructie is opgegeven in het bestand, wordt deze door deze optie overschreven. |
/Klok | Meet en rapporteert de volgende compilatietijden in milliseconden voor het opgegeven .il-bronbestand: Totaal uitgevoerd: de totale tijd die is besteed aan het uitvoeren van alle specifieke bewerkingen die volgen. Opstarten: het bestand wordt geladen en geopend. MD verzenden: metagegevens verzenden. Verwijs naar Def-resolutie: Verwijzingen naar definities in het bestand oplossen. CEE-bestandsgeneratie: het genereren van de bestandsinstallatiekopieën in het geheugen. PE-bestand schrijven: de afbeelding naar een PE-bestand schrijven. |
/debug[:IMPL|OPT] | Bevat foutopsporingsgegevens (lokale variabele en argumentnamen en regelnummers). Hiermee maakt u een PDB-bestand. /foutopsporing zonder extra waarde schakelt JIT-optimalisatie uit en gebruikt sequentiepunten uit het PDB-bestand. IMPL schakelt JIT-optimalisatie uit en maakt gebruik van impliciete sequentiepunten. OPT maakt JIT-optimalisatie mogelijk en maakt gebruik van impliciete sequentiepunten. |
/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 opgegeven door integer in de common language runtime-header. Als de .corflags IL-instructie is opgegeven in het bestand, wordt deze door deze optie overschreven. Zie CorHdr.h, COMIMAGE_FLAGS voor een lijst met geldige waarden voor geheel getal. |
/Vouw | Vouwt identieke methodeteksten in één. |
/highentropyva | Produceert een uitvoerbare uitvoer die ondersteuning biedt voor randomisatie van adresruimten met hoge entropie (ASLR). (Standaard voor /appcontainer.) |
/include:includePath |
Hiermee stelt u een pad in om te zoeken naar bestanden die zijn opgenomen in #include . |
/Itanium | Hiermee geeft u Intel Itanium als de doelprocessor. Als er geen bitness van de afbeelding is opgegeven, is de standaardwaarde /pe64. |
/Sleutel:keyFile |
Compileert filename met een sterke handtekening met behulp van de persoonlijke sleutel in keyFile . |
/Sleutel: @keySource |
Compileert filename met een sterke handtekening met behulp van de persoonlijke sleutel die wordt geproduceerd op keySource . |
/Aanbieding | Produceert een vermeldingsbestand op de standaarduitvoer. Als u deze optie weglaat, wordt er geen vermeldingsbestand geproduceerd. Deze parameter wordt niet ondersteund in de .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 gehele getallen zijn. |
/noautoinherit | Hiermee schakelt u de standaardovername uit Object vanaf wanneer er geen basisklasse is opgegeven. |
/nocorstub | Onderdrukt het genereren van de CORExeMain-stub. |
/nologo | Hiermee onderdrukt u de weergave van de microsoft-opstartbanner. |
/Output:file.ext |
Hiermee geeft u de naam en extensie van het uitvoerbestand op. 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, is de standaardextensie .dll. Opmerking: Als u /output:myfile.dll opgeeft, 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 naar kort. Bijvoorbeeld br naar br.s . |
/pe64 | Hiermee maakt u een 64-bits installatiekopieën (PE32+). Als er geen doelprocessor is opgegeven, is /itanium de standaardwaarde . |
/Vob | Hiermee maakt u een PDB-bestand zonder het bijhouden van foutopsporingsgegevens in te schakelen. |
/Rustige | Hiermee geeft u de stille modus; rapporteert geen voortgang van de assembly. |
/Resource:file.res |
Bevat het opgegeven bronbestand 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. Voor /appcontainer en /arm is het minimale versienummer 6.02. |
/Stack: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 opgegeven door integer in de optionele NT-header. Als de .subsystem IL-instructie 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 de doelprocessor. Als er geen afbeeldingsbitness is opgegeven, is de standaardwaarde /pe64. |
/? | Geeft de opdrachtsyntaxis en opties voor het hulpprogramma weer. |
Notitie
Alle opties voor Ilasm.exe zijn hoofdlettergevoelig en worden herkend door de eerste drie letters. Bijvoorbeeld, /lis is gelijk aan /listing en /res:myresfile.res is gelijk aan /resource:myresfile.res. Opties die argumenten opgeven, accepteren een dubbele punt (:) of een gelijkteken (=) als het 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 vanIlasm.exekunnen ontwikkelaars van hulpprogramma's en compilers zich concentreren op il en het genereren van metagegevens zonder dat ze zich zorgen hoeven te maken over het verzenden van IL 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 maken.
De IL-assembly 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 worden gecompileerd met Ilasm.exe.
Notitie
De compilatie kan mislukken als de laatste regel code in het .il-bronbestand geen volgspaties of een regeleindeteken bevat.
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 runtimemetagegevens ondersteunt. Na het compileren van de code en het uitvoeren van de uitvoer viaIldasm.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 maken.
U kunt deze techniek ook gebruiken om één PE-bestand te maken op basis van verschillende PE-bestanden die oorspronkelijk zijn gegenereerd door verschillende compilers.
Notitie
Momenteel 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-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 waar mogelijk de optie /optimize om korte coderingen te vervangen.
Notitie
Ildasm.exe werkt alleen op bestanden op schijf. Het werkt niet op bestanden die zijn geïnstalleerd in de global assembly-cache.
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 er ongeveer als volgt uitziet:
.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.exegeproduceerd.
ilasm myTestFile
Met de volgende opdracht wordt het IL-bestand myTestFile.il samengesteld en wordt het .dll-bestand myTestFile.dllgeproduceerd.
ilasm myTestFile /dll
Met de volgende opdracht wordt het IL-bestand myTestFile.il samengesteld en wordt het .dll-bestand myNewTestFile.dllgeproduceerd.
ilasm myTestFile /dll /output:myNewTestFile.dll
In het volgende codevoorbeeld ziet u een uiterst eenvoudige toepassing waarmee 'Hallo wereld!' wordt weergegeven op de console. U kunt deze code compileren en vervolgens het hulpprogrammaIldasm.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. Zowel IL- als C#-codevoorbeelden geven 'Hallo wereld!' weer 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
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor