Delen via


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 #includeuitmaken 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

Zie ook