Ilasm.exe (IL Assembler)
IL Assembler genererar en portabel körbar fil (PE) från sammansättningen mellanliggande språk (IL). (Mer information om IL finns i Hanterad körningsprocess.) Du kan köra den resulterande körbara filen, som innehåller IL och nödvändiga metadata, för att avgöra om IL:en fungerar som förväntat.
Det här verktyget installeras automatiskt med Visual Studio. Om du vill köra verktyget använder du Visual Studio Developer Command Prompt eller Visual Studio Developer PowerShell.
Skriv följande vid kommandotolken:
Syntax
ilasm [options] filename [[options]filename...]
Parametrar
Argument | beskrivning |
---|---|
filename |
Namnet på .il-källfilen. Den här filen består av metadatadeklarationsdirektiv och symboliska IL-instruktioner. Flera källfilargument kan anges för att skapa en enda PE-fil med Ilasm.exe. Obs! Se till att den sista kodraden i .il-källfilen antingen har avslutande tomt utrymme eller ett radslutstecken. |
Alternativ | Description |
---|---|
/32bitpreferred | Skapar en 32-bitars föredragen avbildning (PE32). |
/justering: integer |
Anger FileAlignment till det värde som anges av integer i NT-valfritt huvud. Om .alignment IL-direktivet anges i filen åsidosätter det här alternativet det. |
/appcontainer | Genererar en .dll - eller .exe-fil som körs i Windows-appcontainern som utdata. |
/arm | Anger ARM (Advanced RISC Machine) som målprocessor. Om ingen bildbitness anges är standardvärdet /32bitpreferred. |
/bas: integer |
Anger ImageBase till det värde som anges av integer i NT Optional-huvudet. Om IL-direktivet .imagebase anges i filen åsidosätter det här alternativet det. |
/klocka | Mäter och rapporterar följande kompileringstider i millisekunder för den angivna .il-källfilen: Total körning: Den totala tid som ägnas åt att utföra alla specifika åtgärder som följer. Start: Läser in och öppnar filen. Avger MD: Genererar metadata. Referens till def-lösning: Matcha referenser till definitioner i filen. CEE-filgenerering: Generera filbilden i minnet. PE-filskrivning: Skriva bilden till en PE-fil. |
/debug[:IMPL|OPT] | Innehåller felsökningsinformation (lokala variabel- och argumentnamn och radnummer). Skapar en PDB-fil. /debug utan ytterligare värde inaktiverar JIT-optimering och använder sekvenspunkter från PDB-filen. IMPL inaktiverar JIT-optimering och använder implicita sekvenspunkter. OPT aktiverar JIT-optimering och använder implicita sekvenspunkter. |
/Dll | Genererar en .dll fil som utdata. |
/Enc: file |
Skapar Redigera och fortsätt deltan från den angivna källfilen. Det här argumentet är endast för akademiskt bruk och stöds inte för kommersiell användning. |
/exe | Skapar en körbar fil som utdata. Det här är standardinställningen. |
/flaggor: integer |
Anger ImageFlags till det värde som anges av integer i den gemensamma språkkörningsrubriken. Om .corflags IL-direktivet anges i filen åsidosätter det här alternativet det. Se CorHdr.h, COMIMAGE_FLAGS för en lista över giltiga värden för heltal. |
/vika | Viker identiska metodkroppar i en. |
/highentropyva | Genererar en körbar utdata som stöder slumpmässig layout för hög entropiadressutrymme (ASLR). (Standard för /appcontainer.) |
/inbegripa: includePath |
Anger en sökväg för att söka efter filer som ingår i #include . |
/itanium | Anger Intel Itanium som målprocessor. Om ingen bildbitness anges är standardvärdet /pe64. |
/nyckel: keyFile |
Kompilerar filename med en stark signatur med hjälp av den privata nyckeln som finns i keyFile . |
/nyckel: @keySource |
Kompilerar filename med en stark signatur med hjälp av den privata nyckeln som skapas på keySource . |
/Lista | Skapar en listfil på standardutdata. Om du utelämnar det här alternativet skapas ingen listfil. Den här parametern stöds inte i .NET Framework 2.0 eller senare. |
/mdv: versionString |
Anger metadataversionssträngen. |
/msv: major .minor |
Anger metadataströmversionen, var major och minor är heltal. |
/noautoinherit | Inaktiverar standardarv från Object när ingen basklass har angetts. |
/nocorstub | Undertrycker generering av CORExeMain-stub. |
/nologo | Undertrycker microsofts startbanderoll. |
/utdata: file.ext |
Anger utdatafilens namn och tillägg. Som standard är namnet på utdatafilen samma som namnet på den första källfilen. Standardtillägget är .exe. Om du anger alternativet /dll är standardtillägget .dll. Obs! Om du anger /output:myfile.dll anges inte alternativet /dll. Om du inte anger /dll blir resultatet en körbar fil med namnet myfile.dll. |
/optimera | Optimerar långa instruktioner till korta. Till exempel br till br.s . |
/pe64 | Skapar en 64-bitars bild (PE32+). Om ingen målprocessor har angetts är /itanium standardvärdet . |
/pdb | Skapar en PDB-fil utan att aktivera felsökningsinformationsspårning. |
/stilla | Anger tyst läge. rapporterar inte sammansättningsstatus. |
/resurs: file.res |
Innehåller den angivna resursfilen i *.res-format i den resulterande .exe - eller .dll-filen . Endast en .res-fil kan anges med alternativet /resource . |
/ssver: int .int |
Anger versionsnumret för undersystemet i det valfria NT-huvudet. För /appcontainer och /arm är det lägsta versionsnumret 6,02. |
/stack: stackSize |
Anger värdet SizeOfStackReserve i NT Optional-huvudet till stackSize . |
/stripreloc | Anger att inga basflyttar behövs. |
/delsystem: integer |
Anger undersystemet till det värde som anges av integer i NT Optional-huvudet. Om .subsystem IL-direktivet anges i filen åsidosätter det här kommandot det. Se winnt.h, IMAGE_SUBSYSTEM för en lista med giltiga värden för integer . |
/x64 | Anger en 64-bitars AMD-processor som målprocessor. Om ingen bildbitness anges är standardvärdet /pe64. |
/? | Visar kommandosyntax och alternativ för verktyget. |
Kommentar
Alla alternativ för Ilasm.exe är skiftlägesokänsliga och känns igen av de tre första bokstäverna. Till exempel motsvarar /lis /listing och /res:myresfile.res motsvarar /resource:myresfile.res. Alternativ som anger argument accepterar antingen ett kolon (:) eller ett likhetstecken (=) som avgränsare mellan alternativet och argumentet. Till exempel motsvarar /output:file.ext /output=file.ext.
Kommentarer
IL Assembler hjälper verktygsleverantörer att utforma och implementera IL-generatorer. Med hjälp av Ilasm.exe kan verktygs- och kompilatorutvecklare koncentrera sig på generering av IL och metadata utan att behöva generera IL i PE-filformatet.
På samma sätt som andra kompilatorer som riktar sig mot körningen, till exempel C# och Visual Basic, skapar Ilasm.exe inte mellanliggande objektfiler och kräver inte en länkningsfas för att bilda en PE-fil.
IL Assembler kan uttrycka alla befintliga metadata och IL-funktioner för de programmeringsspråk som är inriktade på körningen. På så sätt kan hanterad kod som skrivits på något av dessa programmeringsspråk uttryckas korrekt i IL Assembler och kompileras med Ilasm.exe.
Kommentar
Kompileringen kan misslyckas om den sista kodraden i .il-källfilen inte har något avslutande tomt utrymme eller ett radslutstecken.
Du kan använda Ilasm.exe tillsammans med dess tillhörande verktyg, Ildasm.exe. Ildasm.exe tar en PE-fil som innehåller IL-kod och skapar en textfil som är lämplig som indata för Ilasm.exe. Detta är till exempel användbart när du kompilerar kod på ett programmeringsspråk som inte stöder alla körningsmetadataattribut. När du har sammanställt koden och kört utdata via Ildasm.exe kan den resulterande IL-textfilen redigeras för hand för att lägga till de attribut som saknas. Du kan sedan köra textfilen via Ilasm.exe för att skapa en slutlig körbar fil.
Du kan också använda den här tekniken för att skapa en enskild PE-fil från flera PE-filer som ursprungligen genererades av olika kompilatorer.
Kommentar
För närvarande kan du inte använda den här tekniken med PE-filer som innehåller inbäddad intern kod (till exempel PE-filer som skapats av Visual C++).
För att göra den här kombinerade användningen av Ildasm.exe och Ilasm.exe så korrekt som möjligt ersätter inte assembleren korta kodningar för långa kodningar som du kanske har skrivit i dina IL-källor (eller som kan genereras av en annan kompilator). Använd alternativet /optimize för att ersätta korta kodningar där det är möjligt.
Kommentar
Ildasm.exe fungerar bara på filer på disk. Den fungerar inte på filer som är installerade i den globala sammansättningscacheminnet.
Mer information om grammatiken för IL finns i filen asmparse.grammar i Windows SDK.
Versionsinformation
Från och med .NET Framework 4.5 kan du koppla ett anpassat attribut till en gränssnittsimplementering med hjälp av kod som liknar följande:
.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 )
…
Från och med .NET Framework 4.5 kan du ange en godtycklig blob för marskalk (binärt stort objekt) med hjälp av dess råa binära representation, enligt följande kod:
.method public hidebysig abstract virtual
instance void
marshal({ 38 01 02 FF })
Test(object A_1) cil managed
Mer information om grammatiken för IL finns i filen asmparse.grammar i Windows SDK.
Exempel
Följande kommando monterar IL-filen myTestFile.il och skapar den körbara myTestFile.exe.
ilasm myTestFile
Följande kommando monterar IL-filen myTestFile.il och skapar .dll-filen myTestFile.dll.
ilasm myTestFile /dll
Följande kommando monterar IL-filen myTestFile.il och skapar .dll-filen myNewTestFile.dll.
ilasm myTestFile /dll /output:myNewTestFile.dll
I följande kodexempel visas ett mycket enkelt program som visar "Hello World!" i konsolen. Du kan kompilera den här koden och sedan använda verktyget Ildasm.exe för att generera en IL-fil.
using System;
public class Hello
{
public static void Main(String[] args)
{
Console.WriteLine("Hello World!");
}
}
Följande IL-kodexempel motsvarar det tidigare C#-kodexemplet. Du kan kompilera den här koden till en sammansättning med verktyget IL Assembler. Kodexempel för både IL och C# visar "Hello World!" i konsolen.
// 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