Share via


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