Ensamblador de MSIL (Ilasm.exe)

El Ensamblador de MSIL genera un archivo ejecutable portable (PE) a partir del Lenguaje intermedio de Microsoft (MSIL). (Para obtener más información sobre MSIL, vea Compilar en lenguaje intermedio de Microsoft (MSIL)). Se puede ejecutar el archivo ejecutable resultante, que contiene MSIL y los metadatos requeridos, para determinar si MSIL se comporta de acuerdo con lo esperado.

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

Parámetros

Argumento Descripción

filename

Nombre del archivo de código fuente con extensión .il. Este archivo consta de directivas de declaraciones de metadatos e instrucciones simbólicas de MSIL. Con Ilasm.exe se pueden proporcionar varios archivos de código fuente como argumentos para producir un único archivo PE.

Opción Descripción

/alignment= integer

Establece FileAlignment en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .alignment en el archivo, esta opción la reemplaza.

/base= integer

Establece ImageBase en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .imagebase en el archivo, esta opción la reemplaza.

/clock

Mide e informa de los siguientes tiempos de compilación en milisegundos para el archivo de código fuente .il especificado:

Total Run: tiempo total empleado en la ejecución de todas las operaciones específicas que se muestran a continuación.

Startup: carga y apertura del archivo.

Emitting MD: emisión de metadatos.

Ref to Def Resolution: resolución de referencias en definiciones en el archivo.

CEE File Generation: generación de la imagen de archivo en memoria.

PE File Writing: escritura de la imagen en un archivo PE.

/debug[=IMPL|OPT]

Incluye información de depuración (nombres de argumento y variable local, y números de línea). Crea un archivo PDB.

/debug sin ningún valor adicional deshabilita la optimización JIT y utiliza puntos de secuencia del archivo PDB.

IMPL deshabilita la optimización JIT y utiliza puntos de secuencia implícitos.

OPT habilita la optimización JIT y utiliza puntos de secuencia implícitos.

IMPL y OPT constituyen una novedad de la versión 2.0 de .NET Framework.

/dll

Produce un archivo .dll como resultado.

/enc=file

Crea deltas Editar y continuar a partir del archivo de código fuente especificado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/exe

Produce un archivo ejecutable como resultado. Éste es el valor predeterminado.

/flags= integer

Establece ImageFlags en el valor especificado por integer en el encabezado de Common Language Runtime. Si está especificada la directiva .corflags de IL en el archivo, esta opción la reemplazará. Vea CorHdr.h, COMIMAGE_FLAGS para obtener una lista de valores válidos de integer.

/fold

Forma un solo cuerpo a partir de cuerpos de métodos idénticos.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/include=includePath

Establece una ruta de acceso para buscar los archivos incluidos con #include.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/itanium

Especifica Intel Itanium como procesador de destino.

Si no se especifican los bits de imagen, /pe64 será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/key: keyFile

Compila el argumento filename con una firma segura utilizando la clave privada contenida en keyFile.

/key:@ keySource

Compila el argumento filename con una firma segura utilizando la clave privada producida en keySource.

/listing

Muestra la lista de mensajes en el dispositivo de salida estándar. Si se omite esta opción, no se produce un archivo de lista.

Este parámetro no se admite en la versión 2.0 de .NET Framework o versiones posteriores.

/mdv=versionString

Establece la cadena de versión de metadatos.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/msv=major.minor

Establece la versión de la secuencia de metadatos, donde major y minor son valores enteros.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/noautoinherit

Deshabilita la herencia predeterminada de Object cuando no se especifica ninguna clase base.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/nocorstub

Suprime la generación del código auxiliar de CORExeMain.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/nologo

Suprime la presentación de la portada de inicio de Microsoft.

/output: file.ext

Especifica el nombre y la extensión del archivo resultante. De forma predeterminada, el nombre del archivo resultante coincide con el nombre del primer archivo de código fuente tratado. La extensión predeterminada es .exe. Si se especifica la opción /dll, la extensión predeterminada es .dll.

Nota

El hecho de especificar /output:myfile.dll no supone el establecimiento de la opción /dll . Si no se especifica /dll, el resultado será un archivo ejecutable denominado myfile.dll.

/optimize

Optimiza las instrucciones largas en instrucciones cortas. Por ejemplo, br en br.s.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/pe64

Crea una imagen de 64 bits (PE32+).

Si no se especifica un procesador de destino, /itanium será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/pdb

Crea un archivo PDB sin habilitar un seguimiento de la información de depuración.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/quiet

Especifica el modo no interactivo; no se notifica el progreso del ensamblado.

/resource: file.res

Incluye el archivo de recursos especificado con formato *.res en el archivo .exe o .dll resultante. Sólo se puede especificar un archivo .res con la opción /resource.

/stack=stackSize

Establece el valor SizeOfStackReserve del encabezado opcional NT en stackSize.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/stripreloc

Especifica que no es necesaria ninguna reubicación base.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/subsystem= integer

Establece subsystem en el valor especificado por integer en el encabezado opcional NT. Si se especifica la directiva IL .subsystem en el archivo, este comando lo reemplaza. Vea winnt.h, IMAGE_SUBSYSTEM para ver una lista de los valores válidos para integer.

/x64

Especifica un procesador AMD de 64 bits como procesador de destino.

Si no se especifican los bits de imagen, /pe64 será el valor predeterminado.

Se trata de una novedad de la versión 2.0 de .NET Framework.

/?

Muestra la sintaxis de comandos y opciones para la herramienta.

Nota

Todas las opciones de Ilasm.exe no distinguen mayúsculas de minúsculas, y se reconocen mediante las tres primeras letras. Por ejemplo, /lis equivale a /listing y /res:miarchivores.res equivale a /resource:miarchivores.res. Las opciones que especifican argumentos aceptan un signo de dos puntos (:) o un signo igual (=) como separador entre la opción y el argumento. Por ejemplo, /output:file.ext equivale a /output=file.ext.

Comentarios

El ensamblador de MSIL ayuda a los proveedores de herramientas a diseñar e implementar generadores de MSIL. Mediante la utilización de Ilasm.exe, los programadores de herramientas y compiladores se pueden concentrar en la generación de MSIL y metadatos despreocupándose de la emisión de MSIL en el formato de archivo PE.

Al igual que otros compiladores orientados a Common Language Runtime, como C# y Visual Basic, Ilasm.exe no produce archivos intermedios de objetos y no requiere una fase de vinculación para crear un archivo PE.

El ensamblador de MSIL puede expresar todos los metadatos existentes y las funciones de MSIL que caracterizan a los lenguajes de programación orientados a Common Language Runtime. Esto permite que el código administrado escrito en cualquiera de estos lenguajes de programación se pueda expresar en el Ensamblador de MSIL y compilar con Ilasm.exe de forma correcta.

Se puede utilizar Ilasm.exe conjuntamente con su herramienta complementaria Ildasm.exe. A partir de un archivo PE que contiene código MSIL, Ildasm.exe crea un archivo de texto apropiado como entrada para Ilasm.exe. Esta técnica es muy útil cuando, por ejemplo, se compila código en un lenguaje de programación que no admite todos los atributos de metadatos en tiempo de ejecución. Una vez compilado el código y ejecutados los resultados mediante Ildasm.exe, el archivo de texto de MSIL resultante se puede editar manualmente para agregar los atributos que faltan. A continuación, se puede ejecutar este archivo de texto mediante Ilasm.exe para producir un archivo ejecutable final.

También se puede utilizar esta técnica para producir un único archivo PE a partir de varios archivos PE generados originalmente por varios compiladores diferentes.

Nota

Actualmente no se puede utilizar esta técnica con archivos PE que contienen código nativo incrustado (por ejemplo, archivos PE producidos por Visual C++).

Para que la utilización combinada de Ildasm.exe e Ilasm.exe tenga la mayor precisión posible, el ensamblador no realiza optimizaciones simples ni se detiene a considerar si debe utilizar instrucciones en formato largo o corto. Por ejemplo, la herramienta no intenta determinar si puede sustituir una codificación con formato corto por otra con formato largo que se haya podido escribir en los códigos fuente MSIL (o que pueda emitir otro compilador). Si se desea la codificación con formato corto, se debe escribir explícitamente con dicho formato. No obstante, el ensamblador comprueba si hay condiciones fuera del intervalo donde esto sea posible.

Nota

Ildasm.exe sólo opera en archivos existentes en disco. No opera en archivos instalados en la caché de ensamblados global.

Para obtener más información sobre la gramática de MSIL, vea el archivo asmparse.grammar en .NET Framework SDK.

Ejemplos

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo ejecutable myTestFile.exe.

ilasm myTestFile

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo .dll myTestFile.dll.

ilasm myTestFile /dll 

El comando siguiente ensambla el archivo MSIL myTestFile.il y produce el archivo .dll myNewTestFile.dll.

ilasm myTestFile /dll /output:myNewTestFile.dll

En el siguiente ejemplo de código se muestra una aplicación muy simple que muestra "Hola a todos" en la consola. Puede compilar este código y, a continuación, utilizar la herramienta Ildasm.exe para generar un archivo MSIL.

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

El siguiente ejemplo de código de MSIL se corresponde con el ejemplo de código de C# anterior. Puede compilar este código en un ensamblado utilizando la herramienta Ensamblador de MSIL (Ilasm.exe). Tanto el ejemplo de código de MSIL como el de C# muestran "Hola a todos" en la consola.

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

Vea también

Referencia

Herramientas de .NET Framework
Desensamblador de MSIL (Ildasm.exe)
Símbolo del sistema de SDK

Conceptos

Compilar en lenguaje intermedio de Microsoft (MSIL)