Ildasm.exe (Desensamblador de MSIL)

El desensamblador de MSIL (MSIL Disassembler) es una herramienta complementaria del ensamblador de MSIL (Ilasm.exe). A partir de un archivo ejecutable portable (PE) que contiene código MSIL (Lenguaje intermedio de Microsoft), Ildasm.exe crea un archivo de texto apropiado como entrada para Ilasm.exe.

Esta herramienta se instala automáticamente con Visual Studio y con el SDK de Windows. Para ejecutar la herramienta, se recomienda usar el símbolo del sistema de Visual Studio o del SDK de Windows (shell de CMD). Estas utilidades permiten ejecutar la herramienta fácilmente, sin navegar a la carpeta de instalación. Para obtener más información, vea Símbolos del sistema del SDK de Windows y Visual Studio.

  • Si tiene instalado Visual Studio en el equipo: en la barra de tareas, haga clic en Start, All Programs, Visual Studio y Visual Studio Tools y, a continuación, haga clic en Visual Studio Command Prompt.

    O bien

    Si tiene el SDK de Windows instalado en el equipo: en la barra de tareas, haga clic en Start, All Programs, haga clic en la carpeta del SDK de Windows y, a continuación, haga clic en Command Prompt (o CMD Shell).

  • En el símbolo del sistema, escriba:

ildasm [options] [PEfilename] [options]

Parámetros

Las opciones siguientes se pueden utilizar con archivos .exe, .dll, .obj y .lib.

Opción

Descripción

/out=nombreArchivo

Crea un archivo de salida con el argumento filename especificado, en lugar de mostrar los resultados en una interfaz gráfica de usuario.

/rtf

Genera los resultados en formato de texto enriquecido. Esta opción no es válida si se utiliza junto con la opción /text.

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

/text

Muestra los resultados en la ventana de consola, en lugar de presentarlos en una interfaz gráfica de usuario o en un archivo de salida.

/html

Genera los resultados en formato HTML. Esta opción sólo es válida junto con la opción /output.

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

/?

Muestra la sintaxis de comandos y opciones para la herramienta.

Las opciones adicionales siguientes se pueden utilizar con archivos .exe y .dll.

Opción

Descripción

/bytes

Muestra bytes reales, en formato hexadecimal, como comentarios de instrucciones.

/caverbal

Genera objetos binarios de atributos personalizados en formato verbal. El valor predeterminado es el formato binario.

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

/linenum

Incluye referencias a líneas de código fuente originales.

/nobar

Suprime el indicador de progreso del desensamblado en la ventana emergente.

/noca

Suprime los resultados de atributos personalizados.

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

/pubonly

Desensambla sólo miembros y tipos "public". Equivale a /visibility:PUB.

/quoteallnames

Incluye todos los nombres entre comillas simples.

/raweh

Muestra cláusulas de control de excepciones en formato sin procesar.

/source

Muestra líneas de código fuente originales como comentarios.

/tokens

Muestra símbolos (token) de metadatos de clases y miembros.

/visibility:vis[+vis...]

Desensambla sólo tipos o miembros con la visibilidad especificada. Los valores válidos para vis son los siguientes:

PUB — Público

PRI — Privado

FAM — Familia

ASM — Ensamblado

FAA — Familia y ensamblado

FOA — Familia o ensamblado

PSC — Ámbito privado

Para obtener definiciones de estos modificadores de visibilidad, vea MethodAttributes y TypeAttributes.

Las opciones siguientes sólo se pueden utilizar con archivos .exe y .dll para resultados en consola o en archivo.

Opción

Descripción

/all

Especifica una combinación de las opciones /header, /bytes, /stats, /classlist y /tokens.

NotaNota
En las versiones 1.0 y 1.1 de .NET Framework, especifica una combinación de las opciones /header, /bytes y /tokens.

/classlist

Incluye una lista de las clases definidas en el módulo.

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

/forward

Utiliza la declaración de clase de envío.

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

/headers

Incluye información sobre encabezados de archivos en los resultados.

/item:class[::member[(sig]]

Desensambla los elementos siguientes dependiendo del argumento que se proporcione:

  • Desensambla la clase especificada mediante el argumento class.

  • Desensambla el member especificado de class.

  • Desensambla el member de class con la firma especificada sig. El formato de sig es:

    [instance] returnType(parameterType1, parameterType2, …, parameterTypeN)

    Nota   : Dentro las versiones 1.0 y 1.1 de .NET Framework, sig debe estar seguido por un paréntesis de cierre: (sig). En la versión 2.0 se debe omitir el paréntesis de cierre: (sig.

/noil

Suprime el código resultante producido por el ensamblado de MSIL.

/stats

Incluye estadísticas en la imagen.

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

/typelist

Genera la lista completa de tipos, para mantener el orden de tipos en una acción de ida y vuelta.

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

/unicode

Utiliza codificación Unicode para los resultados.

/utf8

Utiliza codificación UTF-8 para los resultados. El valor predeterminado es ANSI.

Las opciones siguientes sólo se pueden utilizar con archivos .exe, .dll, .obj y .lib para resultados en consola o en archivo.

Opción

Descripción

/metadata[=specifier]

Muestra metadatos, donde specifier es:

MDHEADER — Muestra la información y los tamaños del encabezado de metadatos.

HEX — Muestra información tanto en hexadecimal como en palabras.

CSV — Muestra los contadores de registros y los tamaños de los montones.

UNREX — Muestra externos sin resolver.

SCHEMA — Muestra información del esquema y del encabezado de metadatos.

RAW — Muestra las tablas de metadatos sin formato.

HEAPS — Muestra los montones sin formato.

VALIDATE — Valida la coherencia de los metadatos.

Puede especificar /metadata varias veces, con distintos valores para specifier.

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

Las siguientes opciones sólo se pueden utilizar con archivos .lib para mostrar los resultados en la consola o en un archivo.

Opción

Descripción

/objectfile=filename

Muestra los metadatos de un único archivo objeto en la biblioteca especificada.

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

NotaNota

Todas las opciones de Ildasm.exe no distinguen entre mayúsculas y minúsculas y se reconocen mediante las tres primeras letras.Por ejemplo, /quo equivale a /quoteallnames.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:filename equivale a /output=filename.

Comentarios

Ildasm.exe sólo opera en archivos ejecutables portables (PE) existentes en disco. No opera en archivos instalados en la caché global de ensamblados.

El archivo de texto creado por Ildasm.exe se puede utilizar como entrada del ensamblador de MSIL (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 el ensamblador de MSIL para producir un archivo ejecutable final.

NotaNota

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++).

Se puede utilizar la interfaz gráfica para el usuario predeterminada en el desensamblador de MSIL para ver los metadatos y el código desensamblado de los archivos PE existentes en una vista jerárquica de árbol. Para utilizar dicha interfaz, se ha de escribir ildasm en la línea de comandos sin proporcionar el argumento PEfilename ni opciones. Desde el menú Archivo, puede navegar hasta el archivo PE que desee cargar en Ildasm.exe. Para guardar los metadatos y el código desensamblado mostrados para el PE seleccionado, seleccione el comando Volcar en el menú Archivo. Para guardar únicamente la vista jerárquica de árbol, hay que elegir el comando Volcar TreeView en el menú Archivo. Para obtener una guía detallada de cómo se carga un archivo en Ildasm.exe y cómo se interpretan los resultados, vea el tutorial de Ildasm.exe, ubicado en la carpeta de ejemplos que se incluye en Kit de desarrollo de software de Windows (SDK).

Si se ejecuta Ildasm.exe indicando un nombre de archivo que contenga recursos incrustados, mediante el argumento PEfilename, la herramienta crea varios archivos de salida: un archivo de texto que contiene código MSIL y, para cada recurso administrado incrustado, un nuevo archivo .resources cuyo nombre será el del recurso tal y como se denomina en los metadatos. Si un recurso no administrado se incrusta en el argumento PEfilename, se crea un archivo .res utilizando el nombre de archivo especificado por la opción /output para los resultados MSIL*.*

NotaNota

Ildasm.exe sólo muestra descripciones de metadatos para archivos de entrada .obj y .lib.El código MSIL de estos tipos de archivos no se desensambla.

Puede ejecutar Ildasm.exe sobre un archivo .exe .dll para determinar si está administrado. Si el archivo no está administrado, la herramienta muestra un mensaje que indica que el archivo no tiene encabezado válido de Common Language Runtime y no se puede desensamblar. Si el archivo está administrado, la herramienta se ejecuta correctamente.

Ejemplos

El comando siguiente permite que los metadatos y el código desensamblado del archivo ejecutable portable (PE) MyHello.exe se muestren en la interfaz gráfica para el usuario predeterminada de Ildasm.exe.

ildasm myHello.exe

El comando siguiente desensambla el archivo MyFile.exe y almacena el texto del ensamblador de MSIL resultante en el archivo MyFile.il.

ildasm MyFile.exe /output:MyFile.il

El comando siguiente desensambla el archivo MyFile.exe y muestra el texto del ensamblador de MSIL resultante en la ventana de consola.

ildasm MyFile.exe /text

Si el archivo MyApp.exe contiene recursos incrustados administrados y no administrados, el comando siguiente produce cuatro archivos: MyApp.il, MyApp.res, Icons.resources, y Message.resources:

ildasm MyApp.exe /output:MyApp.il

El comando siguiente desensambla el método MyMethod de la clase MyClass en MyFile.exe y muestra los resultados en la ventana de consola.

ildasm /item:MyClass::MyMethod MyFile.exe /text

En el ejemplo anterior podría haber varios métodos denominados MyMethod con firmas diferentes. El siguiente comando desensambla el método MyMethod con el tipo de valor devuelto void y los tipos de parámetros int32 y string.

ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
NotaNota

En las versiones 1.0 y 1.1 de .NET Framework, el paréntesis izquierdo que sigue al nombre del método debe equilibrarse con un paréntesis derecho después de la firma: MyMethod(instance void(int32)).En la versión 2.0 de .NET Framework el paréntesis de cierre se debe omitir: MyMethod(instance void(int32).

Para recuperar un método static (métodoShared en Visual Basic), omita la palabra clave instance. Los tipos de clases no primitivos como int32 y string deben incluir el espacio de nombres y deben ir precedidos de la palabra clave class. Los tipos externos deben ir precedidos del nombre de la biblioteca entre corchetes. El comando siguiente desensambla un método estático denominado MyMethod que tiene un parámetro de tipo AppDomain y tiene un tipo de valor devuelto de AppDomain.

ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text

Una clase contenedora debe ir precedida de su clase contenedora delimitada por una barra diagonal. Por ejemplo, si la clase MyNamespace.MyClass contiene una clase anidada denominada NestedClass, la clase anidada se identifica como sigue: class MyNamespace.MyClass/NestedClass.

Vea también

Referencia

Ilasm.exe (Ensamblador de MSIL)

Símbolos del sistema del SDK de Windows y Visual Studio

Conceptos

Proceso de ejecución administrada

Otros recursos

Herramientas de .NET Framework

Historial de cambios

Fecha

Historial

Motivo

1 de abril de 2011

Se agregó información sobre el uso de los símbolos del sistema de Visual Studio y del SDK de Windows.

Mejora de la información.