Condividi tramite


Ilasm.exe (assembler MSIL)

Assembler MSIL genera un file eseguibile portabile (PE, Portable Executable) dal linguaggio MSIL (Microsoft Intermediate Language). Per ulteriori informazioni su MSIL, vedere Processo di esecuzione gestita. È possibile eseguire il file eseguibile così ottenuto, contenente MSIL e i metadati necessari, per determinare se MSIL viene eseguito come previsto.

Questo strumento viene installato automaticamente con Visual Studio e con Windows SDK. Per eseguire lo strumento, si consiglia di utilizzare il prompt dei comandi di Visual Studio o il prompt dei comandi di Windows SDK (shell di CMD). Queste utilità consentono di eseguire facilmente lo strumento, senza dover passare alla cartella di installazione. Per ulteriori informazioni, vedere Prompt dei comandi di Visual Studio e Windows SDK.

  • Se si dispone di Visual Studio installato sul computer: nella barra delle applicazioni, fare clic su Start, fare clic su All Programs, fare clic su Visual Studio, fare clic su Visual Studio Tools e quindi su Visual Studio Command Prompt.

    In alternativa

    Se si dispone di Windows SDK installato sul computer: nella barra delle applicazioni, fare clic su Start, fare clic su All Programs, fare clic sulla cartella di Windows SDK e quindi su Command Prompt (o CMD Shell).

  • Al prompt dei comandi digitare quanto segue:

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

Parametri

Argomento

Oggetto di descrizione

nomefile

Il nome del file di origine IL. Questo file è formato da comandi per la dichiarazione di metadati e istruzioni MSIL simboliche. È possibile fornire più argomenti di file di origine per produrre un unico file PE con Ilasm.exe.

NotaNota
Verificare che nell'ultima riga di codice del file di origine con estensione il sia presente uno spazio finale o un carattere di fine riga.

Opzione

Oggetto di descrizione

/alignment=integer

Imposta FileAlignment sul valore specificato da integer nell'intestazione NT facoltativa. Se il comando IL .alignment è specificato nel file, questa opzione ne esegue l'override.

/base=integer

Imposta ImageBase sul valore specificato da integer nell'intestazione NT facoltativa. Se il comando IL .imagebase è specificato nel file, questa opzione ne esegue l'override.

/clock

Misura e riferisce i seguenti tempi di compilazione in millisecondi per il file di origine IL specificato:

Total Run: tempo totale impiegato per l'esecuzione di tutte le operazioni specifiche che seguono.

Startup: caricamento e apertura del file.

Emitting MD: emissione di metadati.

Ref to Def Resolution: risoluzione dei riferimenti nelle definizioni nel file.

CEE File Generation: generazione dell'immagine file nella memoria.

PE File Writing: scrittura dell'immagine in un file PE.

/debug[=IMPL|OPT]

Include informazioni di debug (nomi di argomenti, variabili locali e numeri di riga). Crea un file PDB.

Se si specifica /debug senza altri valori, viene disabilitata l'ottimizzazione JIT e vengono utilizzati i punti di sequenza dal file PDB.

IMPL disabilita l'ottimizzazione JIT e utilizza punti di sequenza impliciti.

OPT attiva l'ottimizzazione JIT e utilizza punti di sequenza impliciti.

IMPL e OPT sono nuovi valori introdotti in .NET Framework versione 2.0.

/dll

Produce un file DLL come output.

/enc=file

Crea delta di Modifica e continuazione a partire dal file di origine specificato.

Questo argomento è esclusivamente per utilizzo accademico e non è supportato per un utilizzo commerciale.

Questa è una nuova opzione di .NET Framework versione 2.0.

/exe

Produce un file eseguibile come output. Questa è l'impostazione predefinita.

/flags=integer

Imposta ImageFlags sul valore specificato da integer nell'intestazione di common language runtime. Se il comando IL .corflags è specificato nel file, questa opzione ne esegue l'override. Per un elenco di valori validi per integer, vedere CorHdr.h, COMIMAGE_FLAGS.

/fold

Raggruppa corpi di metodo identici in uno solo.

Questa è una nuova opzione di .NET Framework versione 2.0.

/include=includePath

Imposta un percorso per la ricerca di file inclusi con #include.

Questa è una nuova opzione di .NET Framework versione 2.0.

/itanium

Specifica Intel Itanium come processore di destinazione.

Se non è specificato il numero di bit dell'immagine, viene automaticamente impostato /pe64.

Questa è una nuova opzione di .NET Framework versione 2.0.

/key:keyFile

Compila nomefile con una firma sicura utilizzando la chiave privata contenuta in Filechiave.

/key:@origineChiave

Compila nomefile con una firma sicura utilizzando la chiave privata prodotta da Originechiave.

/listing

Produce un file di listato sull'output standard. Se si omette questa opzione, non verrà prodotto alcun file di listato.

Questo parametro non è supportato in .NET Framework 2.0 o versione successiva.

/mdv=versionString

Imposta la stringa di versione dei metadati.

Questa è una nuova opzione di .NET Framework versione 2.0.

/msv=major.minor

Imposta la versione del flusso di metadati, dove major e minor sono numeri interi.

Questa è una nuova opzione di .NET Framework versione 2.0.

/noautoinherit

Disabilita l'ereditarietà predefinita da Object quando non è specificata alcuna classe base.

Questa è una nuova opzione di .NET Framework versione 2.0.

/nocorstub

Disabilita la generazione dello stub CORExeMain.

Questa è una nuova opzione di .NET Framework versione 2.0.

/nologo

Evita la visualizzazione del messaggio di avvio Microsoft.

/output:file.est

Specifica il nome e l'estensione del file di output. Per impostazione predefinita, il nome del file di output corrisponde al nome del primo file di origine. L'estensione predefinita è EXE. Se si specifica l'opzione /dll, l'estensione predefinita sarà DLL.

NotaNota
Specificando /output:myfile.dll non viene impostata l'opzione /dll.Se non si specifica /dll, si otterrà un file eseguibile denominato myfile.dll.

/optimize

Ottimizza le istruzioni long convertendole in short. Ad esempio, br viene convertito in br.s.

Questa è una nuova opzione di .NET Framework versione 2.0.

/pe64

Crea un'immagine a 64 bit (PE32+).

Se non è specificato il processore di destinazione, viene automaticamente impostato /itanium.

Questa è una nuova opzione di .NET Framework versione 2.0.

/pdb

Crea un file PDB senza attivare la registrazione delle informazioni di debug.

Questa è una nuova opzione di .NET Framework versione 2.0.

/quiet

Specifica la modalità non interattiva. Non visualizza informazioni sullo stato dell'assembly.

/resource:file.res

Include nel file EXE o DLL ottenuto il file di risorse specificato in formato *.res. È possibile specificare un unico file RES con l'opzione /resource.

/stack=stackSize

Imposta su stackSize il valore di SizeOfStackReserve nell'intestazione facoltativa NT.

Questa è una nuova opzione di .NET Framework versione 2.0.

/stripreloc

Specifica che non sono necessarie rilocazioni di base.

Questa è una nuova opzione di .NET Framework versione 2.0.

/subsystem=integer

Imposta il sottosistema sul valore specificato da integer nell'intestazione NT facoltativa. Se il comando IL .subsystem è specificato nel file, questo comando ne esegue l'override. Per un elenco di valori validi per integer, vedere winnt.h, IMAGE_SUBSYSTEM.

/x64

Specifica un processore AMD a 64 bit come processore di destinazione.

Se non è specificato il numero di bit dell'immagine, viene automaticamente impostato /pe64.

Questa è una nuova opzione di .NET Framework versione 2.0.

/?

Visualizza la sintassi e le opzioni dei comandi dello strumento.

NotaNota

Tutte le opzioni di Ilasm.exe sono soggette alla distinzione tre maiuscole e minuscole e vengono riconosciute dalle prime tre lettere./lis , ad esempio, è equivalente a /listing e /res:myresfile.res è equivalente a /resource:myresfile.res.Le opzioni che specificano argomenti accettano i due punti (:) o un segno di uguale (=) come separatore tra l'opzione e l'argomento./output:file.ext, ad esempio, equivale a /output=file.ext.

Note

Assembler MSIL consente ai fornitori di strumenti di progettare e implementare generatori MSIL. Grazie a Ilasm.exe, gli sviluppatori che si occupano di strumenti e di compilazione possono concentrarsi sulla generazione di metadati e su MSIL senza doversi preoccupare di emettere MSIL nel formato di file PE.

Analogamente ad altri compilatori basati su runtime, quali C# e Visual Basic, Ilasm.exe non produce file oggetto intermedi e non richiede alcuna fase di collegamento per creare un file PE.

Assembler MSIL è in grado di esprimere tutte le funzionalità esistenti per MSIL e i metadati dei linguaggi di programmazione basati su runtime. In questo modo il codice gestito scritto in uno qualsiasi di questi linguaggi di programmazione può essere espresso in Assembler MSIL e compilato con Ilasm.exe in modo appropriato.

NotaNota

È possibile che la compilazione abbia esito negativo se nell'ultima riga di codice del file di origine con estensione il non è presente uno spazio finale o un carattere di fine riga.

È possibile utilizzare Ilasm.exe unitamente allo strumento cui è abbinato, Ildasm.exe. Ildasm.exe accetta un file PE contenente codice MSIL e crea un file di testo adatto come input per Ilasm.exe. Questo è utile, ad esempio, quando si compila del codice in un linguaggio di programmazione che non supporta tutti gli attributi di metadati del runtime. Dopo aver compilato il codice ed eseguito l'output tramite Ildasm.exe, il file di testo MSIL ottenuto potrà essere modificato manualmente per aggiungere gli attributi mancanti. Sarà quindi possibile eseguire questo file di testo mediante Ilasm.exe per produrre un file eseguibile finale.

È inoltre possibile ricorrere a questa tecnica per produrre un unico file PE sulla base di più file PE generati da diversi compilatori.

NotaNota

Attualmente non è possibile avvalersi di questa tecnica con file PE contenenti codice nativo incorporato, ad esempio file PE prodotti da Visual C++ .NET.

Per utilizzare unitamente Ildasm.exe e Ilasm.exe con la maggior accuratezza possibile, nell'assembler non vengono eseguite alcune semplici ottimizzazioni, ovvero non si deduce se utilizzare forme di istruzioni brevi o lunghe. Mediante tale strumento, ad esempio, non si tenta di determinare se sia possibile sostituire una codifica breve con una codifica lunga scritta nelle origini MSIL o emessa da un altro compilatore. Se si desidera la codifica breve, sarà necessario scrivere esplicitamente tale forma. Laddove possibile, viene tuttavia effettuato un controllo dei riferimenti o valori non compresi nell'intervallo.

NotaNota

Ildasm.exe opera solo su file su discoe non su file installati nella Global Assembly Cache.

Per ulteriori informazioni sulla grammatica di MSIL, vedere il file asmparse.grammar in Windows Software Development Kit (SDK).

Esempi

Il comando che segue assembla il file MSIL myTestFile.il e produce l'eseguibile myTestFile.exe.

ilasm myTestFile

Il comando che segue assembla il file MSIL myTestFile.il e produce il file DLL myTestFile.dll.

ilasm myTestFile /dll 

Il comando che segue assembla il file MSIL myTestFile.il e produce il file DLL myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

Nell'esempio di codice riportato di seguito viene illustrata un'applicazione molto semplice che determina la visualizzazione della stringa "Hello World!" sulla console. È possibile compilare questo codice e quindi utilizzare lo strumento Ildasm.exe per generare un file MSIL.

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

L'esempio di codice MSIL riportato di seguito corrisponde al precedente esempio di codice C#. È possibile compilare questo codice in un assembly mediante lo strumento Ilasm.exe (assembler MSIL). Entrambi gli esempi di MSIL e C# determinano la visualizzazione di "Hello World!" sulla 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

Vedere anche

Riferimenti

Ildasm.exe (disassemblatore MSIL)

Prompt dei comandi di Visual Studio e Windows SDK

Concetti

Processo di esecuzione gestita

Altre risorse

Strumenti di .NET Framework

Cronologia delle modifiche

Data

Cronologia

Motivo

Aprile 2011

Sono state aggiunte informazioni sull'utilizzo di Visual Studio e dei prompt dei comandi di Windows SDK.

Miglioramento delle informazioni.