Desensamblador de MSIL (Ildasm.exe)
Actualización: noviembre 2007
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.
ildasm [options] [PEfilename] [options]
Parámetros
Las opciones siguientes se pueden utilizar con archivos .exe, .dll, .obj y .lib.
Opción |
Descripción |
---|---|
/output=filename |
Crea un archivo de resultados 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 resultados. |
/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.
Nota:
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. |
/header |
Incluye información sobre encabezados de archivos en los resultados. |
/item:class[::member[(sig]] |
Desensambla los elementos siguientes dependiendo del argumento que se proporcione:
|
/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. |
Nota
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é de ensamblados global.
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.
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++).
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. En el menú Archivo es posible desplazarse al archivo PE que se desee cargar en Ildasm.exe. Para guardar los metadatos y el código desensamblado que se muestran en el archivo PE seleccionado, hay que elegir 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 resultados: 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*.*
Nota
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
Nota
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
Conceptos
Compilar en lenguaje intermedio de Microsoft (MSIL)
Referencia
Herramientas de .NET Framework