Ilasm.exe (MSIL-Assembler)

Aktualisiert: April 2011

Das MSIL Assembler-Tool generiert eine PE-Datei (Portable Executable) aus MSIL (Microsoft Intermediate Language). (Weitere Informationen zu MSIL finden Sie unter Der verwaltete Ausführungsprozess). Sie können die erstellte ausführbare Datei mit MSIL und den erforderlichen Metadaten ausführen, um zu ermitteln, ob die Ausführung von MSIL Ihren Erwartungen entspricht.

Dieses Tool wird automatisch mit Visual Studio und mit dem Windows SDK installiert. Um das Tool auszuführen, empfiehlt es sich, dass Sie die Visual Studio-Eingabeaufforderung oder Windows SDK-Eingabeaufforderung (CMD-Shell) verwenden. Mit diesen Hilfsprogrammen können Sie das Tool problemlos ausführen, ohne in den Installationsordner zu navigieren. Weitere Informationen finden Sie unter Visual Studio- und Windows SDK-Eingabeaufforderungen.

  • Wenn Visual Studio auf dem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, Visual Studio und Visual Studio Tools, und klicken Sie dann auf Visual Studio Command Prompt.

    – oder –

    Wenn das Windows SDK auf Ihrem Computer installiert ist: Klicken Sie auf der Taskleiste auf Start, All Programs, klicken Sie auf den Ordner für das Windows SDK, und klicken anschließend auf Command Prompt (oder CMD Shell).

  • Geben Sie an der Eingabeaufforderung Folgendes ein:

ilasm [options] filename [[options]filename...]

Parameter

Argument

Beschreibungen

filename

Der Name der IL-Quelldatei. Diese Datei enthält Direktiven für die Deklaration von Metadaten und MSIL-Anweisungen mit Symbolen. Zum Erstellen einer einzelnen PE-Datei mithilfe von Ilasm.exe können mehrere Quelldateiargumente angegeben werden.

HinweisHinweis
Vergewissern Sie sich, dass die letzte Codezeile in der Quelldatei mit der Erweiterung IL entweder ein nachgestelltes Leerzeichen oder ein Zeilenendezeichen besitzt.

Option

Beschreibungen

/alignment=integer

Setzt FileAlignment auf den Wert, der im NT Optional-Header durch integer angegeben wird. Wenn die .alignment IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben.

/base=integer

Setzt ImageBase auf den Wert, der im NT Optional-Header durch integer angegeben wird. Wenn die .imagebase IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben.

/clock

Erfasst und berichtet die folgenden Kompilierungszeiten für die angegebene IL-Quelldatei in Millisekunden:

Gesamtlaufzeit (Total Run): Die Gesamtzeit für die Durchführung aller nachfolgenden spezifischen Operationen.

Start (Startup): Laden und Öffnen der Datei.

Metadatenausgabe (Emitting MD): Ausgeben von Metadaten.

Auflösen von Verweisen auf Definitionen (Ref to Def Resolution): Auflösen von Verweisen auf Definitionen in der Datei.

Erstellen der CEE-Datei (CEE File Generation): Generieren des Dateiabbilds im Arbeitsspeicher.

Schreiben in PE-Datei (PE File Writing): Schreiben des Abbilds in eine PE-Datei.

/debug[=IMPL|OPT]

Schließt Debuginformationen (Namen lokaler Variablen und Argumente sowie Zeilennummern) ein. Erstellt eine PDB-Datei.

/debug ohne zusätzlichen Wert deaktiviert die JIT-Optimierung und verwendet Sequenzpunkte aus der PDB-Datei.

IMPL deaktiviert die JIT-Optimierung und verwendet implizite Sequenzpunkte.

OPT aktiviert die JIT-Optimierung und verwendet implizite Sequenzpunkte.

IMPL und OPT sind neu in .NET Framework, Version 2.0.

/dll

Erstellt eine DLL-Datei als Ausgabe.

/enc=file

Erstellt Edit-and-Continue-Deltas aus der angegebenen Quelldatei.

Die Verwendung dieses Arguments ist nur zu akademischen Zwecken vorgesehen. Nutzung zu kommerziellen Zwecken ist untersagt.

Neu in .NET Framework, Version 2.0.

/exe

Erstellt eine ausführbare Datei als Ausgabe. Dies ist die Standardeinstellung.

/flags=integer

Setzt ImageFlags auf den Wert, der im Common Language Runtime-Header durch integer angegeben wird. Wenn die .corflags IL-Direktive in der Datei angegeben ist, wird sie durch diese Option überschrieben. Eine Liste der für integer gültigen Werte finden Sie unter "CorHdr.h , COMIMAGE_FLAGS".

/fold

Fasst identische Methodentexte in einem Text zusammen.

Neu in .NET Framework, Version 2.0.

/include=includePath

Legt einen Suchpfad für die in #include enthaltenen Dateien fest.

Neu in .NET Framework, Version 2.0.

/itanium

Gibt Intel Itanium als Zielprozessor an.

Wenn keine Abbild-Bitness angegeben wurde, lautet der Standard /pe64.

Neu in .NET Framework, Version 2.0.

/key:keyFile

Kompiliert filename mit einer starken Signatur unter Verwendung des privaten Schlüssels in keyFile.

/key:@keySource

Kompiliert filename mit einer starken Signatur unter Verwendung des in keySource erstellten privaten Schlüssels.

/listing

Erstellt in der Standardausgabe eine Listingdatei. Wenn Sie diese Option überspringen, wird keine Listingdatei erstellt.

Dieser Parameter wird in .NET Framework, Version 2.0 oder höher, nicht unterstützt.

/mdv=versionString

Legt die Zeichenfolge der Metadatenversion fest.

Neu in .NET Framework, Version 2.0.

/msv=major.minor

Legt die Version des Metadatenstreams fest, wobei major und minor ganze Zahlen sind.

Neu in .NET Framework, Version 2.0.

/noautoinherit

Deaktiviert die Standardvererbung von Object, wenn keine Basisklasse angegeben wurde.

Neu in .NET Framework, Version 2.0.

/nocorstub

Unterdrückt die Generierung des CORExeMain-Stubs.

Neu in .NET Framework, Version 2.0.

/nologo

Unterdrückt die Anzeige des Startbanners von Microsoft.

/output:file.ext

Gibt den Namen und die Erweiterung der Ausgabedatei an. Standardmäßig stimmen der Name der Ausgabedatei und der der ersten Quelldatei überein. Die Standarderweiterung ist .exe. Wenn Sie die Option /dll angeben, ist die Standarderweiterung DLL.

HinweisHinweis
Durch die Angabe von /output:myfile.dll wird nicht die Option /dll festgelegt.Wenn Sie /dll nicht angeben, erhalten Sie eine ausführbare Datei mit dem Namen myfile.dll.

/optimize

Optimiert lange Anweisungen in kurze Anweisungen. Beispielsweise br in br.s.

Neu in .NET Framework, Version 2.0.

/pe64

Erstellt ein 64-Bit-Abbild (PE32 +).

Wenn kein Zielprozessor angegeben wurde, lautet der Standard /itanium.

Neu in .NET Framework, Version 2.0.

/pdb

Erstellt eine PDB-Datei, ohne das Nachverfolgen von Debuginformationen zu aktivieren.

Neu in .NET Framework, Version 2.0.

/quiet

Gibt den stillen Modus an, wobei der Verlauf der Assembly nicht gemeldet wird.

/resource:file.res

Enthält die angegebene Ressourcendatei im Format *.res in der erhaltenen EXE- bzw. DLL-Datei. Mit der Option /resource kann nur eine RES-Datei angegeben werden.

/stack=stackSize

Legt den SizeOfStackReserve-Wert im NT Optional-Header auf stackSize fest.

Neu in .NET Framework, Version 2.0.

/stripreloc

Gibt an, dass keine Basisumsetzungen benötigt werden.

Neu in .NET Framework, Version 2.0.

/subsystem=integer

Setzt subsystem auf den Wert, der im NT Optional-Header durch integer angegeben wird. Wenn die .subsystem IL-Direktive in der Datei angegeben ist, wird sie durch diesen Befehl überschrieben. Eine Liste der gültigen Werte für integer finden Sie unter "winnt.h, IMAGE_SUBSYSTEM".

/x64

Gibt einen 64-Bit-AMD-Prozessor als Zielprozessor an.

Wenn keine Abbild-Bitness angegeben wurde, lautet der Standard /pe64.

Neu in .NET Framework, Version 2.0.

/?

Zeigt Befehlssyntax und Optionen für das Tool an.

HinweisHinweis

Bei allen Optionen für Ilasm.exe wird die Groß- und Kleinschreibung nicht berücksichtigt. Sie werden anhand der ersten drei Buchstaben erkannt.Zum Beispiel entspricht /lis der Option /listing und /res:myresfile.res entspricht /resource:myresfile.res.Optionen, durch die Argumente angegeben werden, können entweder einen Doppelpunkt (:) oder ein Gleichheitszeichen (=) als Trennzeichen zwischen der Option und dem Argument enthalten./output:file.ext entspricht beispielsweise /output=file.ext.

Hinweise

Das MSIL Assembler-Tool unterstützt Anbieter von Tools beim Entwerfen und Implementieren von MSIL-Generatoren. Durch die Verwendung von Ilasm.exe können sich Entwickler von Tools und Compilern auf die Generierung von MSIL und Metadaten konzentrieren, da die Ausgabe von MSIL im PE-Dateiformat keine Probleme bereitet.

Ähnlich wie andere Compiler, die die Laufzeit ansprechen (z. B. C# und Visual Basic), erstellt Ilasm.exe keine Objektzwischendateien und benötigt keine Verknüpfungsstufe zum Erstellen einer PE-Datei.

Das MSIL Assembler-Tool kann alle vorhandenen Metadaten und MSIL-Features der Programmiersprachen ausdrücken, die die Laufzeit ansprechen. Dadurch kann verwalteter Code, der in einer dieser Programmiersprachen geschrieben wurde, im MSIL Assembler-Tool adäquat ausgedrückt und mit Ilasm.exe kompiliert werden.

HinweisHinweis

Die Kompilierung könnte fehlschlagen, wenn die letzte Codezeile in der Quelldatei mit der Erweiterung IL entweder kein nachgestelltes Leerzeichen oder kein Zeilenendezeichen besitzt.

Sie können Ilasm.exe zusammen mit dem zugehörigen Tool Ildasm.exe verwenden. Ildasm.exe erstellt aus einer PE-Datei mit MSIL-Code eine als Eingabe für Ilasm.exe geeignete Textdatei. Dies empfiehlt sich z. B. beim Kompilieren von Code in einer Programmiersprache, die nicht alle Attribute der Metadaten der Laufzeit unterstützt. Nach dem Kompilieren des Codes und dem Ausführen seiner Ausgabe durch Ildasm.exe kann die erstellte MSIL-Textdatei manuell bearbeitet werden, um die fehlenden Attribute hinzuzufügen. Sie können diese Textdatei anschließend durch Ilasm.exe ausführen, um eine endgültige ausführbare Datei zu erstellen.

Mit diesem Verfahren können Sie auch eine einzelne PE-Datei aus mehreren PE-Dateien erstellen, die ursprünglich von anderen Compilern generiert wurden.

HinweisHinweis

Dieses Verfahren kann gegenwärtig nicht auf PE-Dateien angewendet werden, die eingebetteten systemeigenen Code enthalten (z. B. von Visual C++ erstellte PE-Dateien).

Um bei der kombinierten Verwendung von Ildasm.exe und Ilasm.exe größtmögliche Genauigkeit zu gewährleisten, führt der Assembler einige einfache Optimierungen nicht durch. Es wird nicht hergeleitet, ob die Kurz- oder Langform von Anweisungen verwendet werden soll. Das Tool bestimmt z. B. nicht, ob eine kurze Codierung durch eine lange Codierung ersetzt werden kann, die Sie in den MSIL-Quellen verfasst haben oder die von einem anderen Compiler ausgegeben wurde. Wenn Sie die kurze Codierung wünschen, müssen Sie dies explizit schreiben. Der Assembler führt jedoch eine Überprüfung auf ungültige Bedingungen durch, sofern dies möglich ist.

HinweisHinweis

Ildasm.exe kann nur für Dateien auf der Festplatte verwendet werden.Es kann nicht für Dateien verwendet werden, die im globalen Assemblycache installiert sind.

Weitere Informationen zur Grammatik von MSIL finden Sie in der Datei asmparse.grammar im Windows Software Development Kit (SDK).

Beispiele

Der folgende Befehl assembliert die MSIL-Datei myTestFile.il und erstellt die ausführbare Datei myTestFile.exe..

ilasm myTestFile

Der folgende Befehl assembliert die MSIL-Datei myTestFile.il und erstellt die DLL-Datei myTestFile.dll.

ilasm myTestFile /dll 

Der folgende Befehl assembliert die MSIL-Datei myTestFile.il und erstellt die DLL-Datei myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

Im folgenden Codebeispiel wird eine sehr einfache Anwendung veranschaulicht, durch die "Hello World!" auf der Konsole ausgegeben wird. Sie können diesen Code kompilieren und dann das Tool Ildasm.exe verwenden, um eine MSIL-Datei zu generieren.

using System;
public class Hello
{
    public static void Main(String[] args)
    {
        Console.WriteLine("Hello World!");
    }
}

Das folgende MSIL-Codebeispiel entspricht dem vorherigen C#-Codebeispiel. Sie können diesen Code mit dem Tool Ilasm.exe (MSIL-Assembler) in eine Assembly kompilieren. Sowohl durch das MSIL- als auch durch das C#-Codebeispiel wird "Hello World!" auf der Konsole ausgegeben.

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

Siehe auch

Referenz

Ildasm.exe (MSIL Disassembler-Tool)

Visual Studio- und Windows SDK-Eingabeaufforderungen

Konzepte

Der verwaltete Ausführungsprozess

Weitere Ressourcen

.NET Framework-Tools

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

April 2011

Hinzugefügte Informationen zur Verwendung der Visual Studio- und Windows SDK-Eingabeaufforderungen.

Informationsergänzung.