Ildasm.exe (Desensamblador de IL)Ildasm.exe (IL Disassembler)

El Desensamblador de IL es una herramienta complementaria del Ensamblador de IL (Ilasm.exe).The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). A partir de un archivo portable ejecutable (PE) que contiene código de lenguaje intermedio (IL), Ildasm.exe crea un archivo de texto que se puede usar como entrada para Ilasm.exe.Ildasm.exe takes a portable executable (PE) file that contains intermediate language (IL) code and creates a text file suitable as input to Ilasm.exe.

Esta herramienta se instala automáticamente con Visual Studio.This tool is automatically installed with Visual Studio. Para ejecutar la herramienta, use Símbolo del sistema para desarrolladores de Visual Studio (o Símbolo del sistema de Visual Studio en Windows 7).To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Para más información, consulte Símbolos del sistema.For more information, see Command Prompts.

En el símbolo del sistema, escriba lo siguiente:At the command prompt, type the following:

SintaxisSyntax

ildasm [options] [PEfilename] [options]

ParámetrosParameters

Las siguientes opciones se pueden usar con archivos .exe, .dll, .obj, .lib y .winmd.The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

OpciónOption DESCRIPCIÓNDescription
/out= filename/out= filename Crea un archivo de salida con el filename especificado, en lugar de mostrar los resultados en una interfaz gráfica de usuario.Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf Genera la salida en formato de texto enriquecido.Produces output in rich text format. Esta opción no es válida si se usa junto con la opción /text.Invalid with the /text option.
/text/text Muestra los resultados en la ventana de la consola, en lugar de presentarlos en una interfaz gráfica de usuario o en un archivo de salida.Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html Genera la salida en formato HTML.Produces output in HTML format. Esta opción solo es válida si se usa con la opción /output.Valid with the /output option only.
/?/? Muestra la sintaxis de comandos y las opciones de la herramienta.Displays the command syntax and options for the tool.

Las siguientes opciones adicionales se pueden usar con archivos .exe, .dll y .winmd.The following additional options are available for .exe, .dll, and .winmd files.

OpciónOption DESCRIPCIÓNDescription
/bytes/bytes Muestra bytes reales, en formato hexadecimal, como comentarios de instrucciones.Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal Genera objetos binarios de atributos personalizados en formato verbal.Produces custom attribute blobs in verbal form. El valor predeterminado es el formato binario.The default is binary form.
/linenum/linenum Incluye referencias a líneas de código fuente originales.Includes references to original source lines.
/nobar/nobar Suprime la ventana emergente del indicador de progreso del desensamblado.Suppresses the disassembly progress indicator pop-up window.
/noca/noca Suprime la salida de atributos personalizados.Suppresses the output of custom attributes.
/project/project Muestra los metadatos en la forma en que aparecen en el código administrado, no de la forma en que aparecen en el entorno de Windows Runtime nativo.Displays metadata the way it appears to managed code, instead of the way it appears in the native Windows Runtime. Si PEfilename no es un archivo de metadatos de Windows ( .winmd), esta opción no tiene ningún efecto.If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. Consulte Compatibilidad de .NET Framework con las aplicaciones de la Tienda Windows y Windows en tiempo de ejecución.See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly Desensambla únicamente tipos y miembros públicos.Disassembles only public types and members. Equivale a /visibility:PUB.Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames Incluye todos los nombres entre comillas simples.Includes all names in single quotes.
/raweh/raweh Muestra sin formato las cláusulas de control de excepciones.Shows exception handling clauses in raw form.
/source/source Muestra líneas de código fuente originales como comentarios.Shows original source lines as comments.
/tokens/tokens Muestra tokens de metadatos de clases y miembros.Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] Desensambla únicamente tipos o miembros con la visibilidad especificada.Disassembles only types or members with the specified visibility. Los valores válidos para vis son los siguientes:The following are valid values for vis:

PUB: públicoPUB — Public

PRI: privadoPRI — Private

FAM: familiaFAM — Family

ASM: ensambladoASM — Assembly

FAA: familia y ensambladoFAA — Family and Assembly

FOA: familia o ensambladoFOA — Family or Assembly

PSC: ámbito privadoPSC — Private Scope

Para obtener definiciones de estos modificadores de visibilidad, vea MethodAttributes y TypeAttributes.For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

Las opciones siguientes se pueden usar con archivos .exe, .dll y .winmd para mostrar la salida únicamente en la consola o en un archivo.The following options are valid for .exe, .dll, and .winmd files for file or console output only.

OpciónOption DESCRIPCIÓNDescription
/all/all Especifica una combinación de las opciones /header, /bytes, /stats, /classlist y /tokens.Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist Incluye una lista de las clases definidas en el módulo.Includes a list of classes defined in the module.
/forward/forward Usa la declaración de clase de envío.Uses forward class declaration.
/headers/headers Incluye información de encabezados de archivos en la salida.Includes file header information in the output.
/item: class[ :: member[(sig]]/item: class[:: member[(sig]] Desensambla los elementos siguientes dependiendo del argumento proporcionado:Disassembles the following depending upon the argument supplied:

- Desensambla el elemento class especificado.- Disassembles the specified class.
- Desensambla el elemento member de class.- Disassembles the specified member of the class.
- Desensambla el elemento member de class con la firma especificada sig.- Disassembles the member of the class with the specified signature sig. El formato de sig es:The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Nota En las versiones 1.0 y 1.1 de .NET Framework, sig debe ir seguido de un paréntesis de cierre: (sig).Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). A partir de .NET Framework 2.0, el paréntesis de cierre se debe omitir: (sig.Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil Suprime la salida de código del ensamblado de IL.Suppresses IL assembly code output.
/stats/stats Incluye estadísticas en la imagen.Includes statistics on the image.
/typelist/typelist Genera la lista completa de tipos para mantener el orden de tipos en una acción de ida y vuelta.Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode Usa codificación Unicode para la salida.Uses Unicode encoding for the output.
/utf8/utf8 Usa codificación UTF-8 para la salida.Uses UTF-8 encoding for the output. ANSI es el valor predeterminado.ANSI is the default.

Las opciones siguientes se pueden usar con archivos .exe, .dll, .obj, .lib y .winmd para mostrar la salida únicamente en la consola o en un archivo.The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

OpciónOption DESCRIPCIÓNDescription
/metadata[=specifier]/metadata[=specifier] Muestra metadatos, donde specifier es:Shows metadata, where specifier is:

MDHEADER: muestra la información y los tamaños del encabezado de metadatos.MDHEADER — Show the metadata header information and sizes.

HEX: muestra información tanto en hexadecimal como en palabras.HEX — Show information in hex as well as in words.

CSV: muestra el número de registros y los tamaños de los montones.CSV — Show the record counts and heap sizes.

UNREX: muestra externos sin resolver.UNREX — Show unresolved externals.

SCHEMA: muestra información del esquema y del encabezado de metadatos.SCHEMA — Show the metadata header and schema information.

RAW: muestra las tablas de metadatos sin formato.RAW — Show the raw metadata tables.

HEAPS: muestra los montones sin formato.HEAPS — Show the raw heaps.

VALIDATE: valida la coherencia de los metadatos.VALIDATE — Validate the consistency of the metadata.

Puede especificar /metadata varias veces con valores diferentes para specifier.You can specify /metadata multiple times, with different values for specifier.

Las siguientes opciones se pueden usar con archivos .lib para mostrar la salida únicamente en la consola o en un archivo.The following options are valid for .lib files for file or console output only.

OpciónOption DESCRIPCIÓNDescription
/objectfile=filename/objectfile=filename Muestra los metadatos de un único archivo objeto en la biblioteca especificada.Shows the metadata of a single object file in the specified library.

Nota

Ninguna de las opciones de Ildasm.exe distingue entre mayúsculas y minúsculas, y se reconocen mediante las tres primeras letras.All options for Ildasm.exe are case-insensitive and recognized by the first three letters. Por ejemplo, /quo equivale a /quoteallnames.For example, /quo is equivalent to /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.Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. Por ejemplo, /output: nombreArchivo equivale a /output= nombreArchivo.For example, /output: filename is equivalent to /output= filename.

ComentariosRemarks

Ildasm.exe solo funciona en archivos portables ejecutables (PE) del disco.Ildasm.exe only operates on PE files on disk. No funciona en archivos instalados en la caché global de ensamblados.It does not operate on files installed in the global assembly cache.

El archivo de texto creado por Ildasm.exe se puede usar como entrada para el Ensamblador de IL (Ilasm.exe).The text file produced by Ildasm.exe can be used as input to the IL Assembler (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.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Una vez compilado el código y ejecutada su salida mediante Ildasm.exe, el archivo de texto de IL resultante se puede editar manualmente para agregar los atributos que faltan.After compiling the code and running its output through Ildasm.exe, the resulting IL text file can be hand-edited to add the missing attributes. A continuación, puede ejecutar este archivo de texto mediante el Ensamblador de IL para generar un archivo ejecutable final.You can then run this text file through the IL Assembler to produce a final executable file.

Nota

Actualmente no se puede usar esta técnica con archivos PE que contienen código nativo incrustado (por ejemplo, archivos PE generados por Visual C++).Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

Puede usar la interfaz gráfica de usuario predeterminada en el Desensamblador de IL para ver los metadatos y el código desensamblado de los archivos PE existentes en una vista jerárquica de árbol.You can use the default GUI in the IL Disassembler to view the metadata and disassembled code of any existing PE file in a hierarchical tree view. Para usar dicha interfaz, escriba ildasm en la línea de comandos sin proporcionar el argumento PEfilename ni ninguna de las opciones.To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. Desde el menú Archivo puede navegar hasta el archivo PE que quiera cargar en Ildasm.exe.From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. Para guardar los metadatos y el código desensamblado mostrados para el PE seleccionado, seleccione el comando Volcar en el menú Archivo.To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. Para guardar únicamente la vista de árbol jerárquica, seleccione el comando Volcar vista de árbol en el menú Archivo.To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Para obtener detalles sobre el modo de cargar un archivo en Ildasm.exe e interpretar la salida, vea el tutorial de Ildasm.exe, ubicado en la carpeta de ejemplos que se incluye con Windows SDK.For a detailed guide to loading a file into Ildasm.exe and interpreting the output, see the Ildasm.exe Tutorial, located in the Samples folder that ships with the Windows SDK.

Si ejecuta Ildasm.exe con un argumento PEfilename que contiene recursos incrustados, la herramienta creará varios archivos de salida: un archivo de texto que contiene código IL y, para cada recurso administrado incrustado, un nuevo archivo .resources al que asignará el nombre usado para el recurso en los metadatos.If you provide Ildasm.exe with a PEfilename argument that contains embedded resources, the tool produces multiple output files: a text file that contains IL code and, for each embedded managed resource, a .resources file produced using the resource's name from metadata. Si un recurso no administrado se inserta en el argumento PEfilename, se creará un archivo .res con el nombre de archivo especificado por la opción /output para la salida de IL.If an unmanaged resource is embedded in PEfilename, a .res file is produced using the filename specified for IL output by the /output option.

Nota

Ildasm.exe solo muestra descripciones de metadatos para archivos de entrada .obj y .lib.Ildasm.exe shows only metadata descriptions for .obj and .lib input files. El código IL de estos tipos de archivos no se desensambla.IL code for these file types is not disassembled.

Puede ejecutar Ildasm.exe en un archivo .exe o .dll para determinar si está administrado.You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. Si el archivo no está administrado, la herramienta muestra un mensaje que indica que el archivo no tiene un encabezado válido de Common Language Runtime y no se puede desensamblar.If the file is not managed, the tool displays a message stating that the file has no valid common language runtime header and cannot be disassembled. Si el archivo está administrado, la herramienta se ejecuta correctamente.If the file is managed, the tool runs successfully.

Información de versiónVersion Information

A partir de .NET Framework 4.5, Ildasm.exe controla un objeto binario grande (BLOB) de serialización desconocido mediante la presentación del contenido binario sin formato.Starting with the .NET Framework 4.5, Ildasm.exe handles an unrecognized marshal BLOB (binary large object) by displaying the raw binary content. Por ejemplo, el código siguiente muestra cómo se muestra un BLOB de cálculo de referencias generado por un programa de C#:For example, the following code shows how a marshal BLOB generated by a C# program is displayed:

public void Test([MarshalAs((short)70)] int test) { }
// IL from Ildasm.exe output
.method public hidebysig instance void Test(int32  marshal({ 46 }) test) cil managed

A partir de .NET Framework 4.5, Ildasm.exe muestra atributos que se aplican a las implementaciones de interfaz, tal como se muestra en el siguiente fragmento de salida de Ildasm.exe:Starting with the .NET Framework 4.5, Ildasm.exe displays attributes that are applied to interface implementations, as shown in the following excerpt from Ildasm.exe output:

.class public auto ansi beforefieldinit MyClass
  extends [mscorlib]System.Object
  implements IMyInterface
  {
    .interfaceimpl type IMyInterface
    .custom instance void
      [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 )
      …

EjemplosExamples

El comando siguiente hace que los metadatos y el código desensamblado del archivo PE MyHello.exe se muestren en la interfaz gráfica de usuario predeterminada de Ildasm.exe.The following command causes the metadata and disassembled code for the PE file MyHello.exe to display in the Ildasm.exe default GUI.

ildasm myHello.exe

El comando siguiente desensambla el archivo MyFile.exe y almacena el texto del Ensamblador de IL resultante en el archivo MyFile.il.The following command disassembles the file MyFile.exe and stores the resulting IL Assembler text in the file MyFile.il.

ildasm MyFile.exe /output:MyFile.il

El comando siguiente desensambla el archivo MyFile.exe y muestra el texto del Ensamblador de IL resultante en la ventana de consola.The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

Si el archivo MyApp.exe contiene recursos insertados administrados y no administrados, el comando siguiente genera cuatro archivos: MyApp.il, MyApp.res, Icons.resources y Message.resources:If the file MyApp.exe contains embedded managed and unmanaged resources, the following command produces four files: MyApp.il, MyApp.res, Icons.resources, and 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 la salida en la ventana de consola.The following command disassembles the method MyMethod within the class MyClass in MyFile.exe and displays the output to the console window.

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

En el ejemplo anterior podría haber varios métodos denominados MyMethod con firmas diferentes.In the previous example, there could be several methods named MyMethod with different signatures. El siguiente comando desensambla el método de instancia MyMethod con el tipo de valor devuelto void y los tipos de parámetros int32 y string.The following command disassembles the instance method MyMethod with the return type of void and the parameter types int32 and 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)).In the .NET Framework versions 1.0 and 1.1, the left parenthesis that follows the method name must be balanced by a right parenthesis after the signature: MyMethod(instance void(int32)). A partir de .NET Framework 2.0, el paréntesis de cierre se debe omitir: MyMethod(instance void(int32).Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

Para recuperar un método static (métodoShared en Visual Basic), omita la palabra clave instance.To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. Los tipos de clase no primitivos como int32 y string deben incluir el espacio de nombres y deben ir precedidos de la palabra clave class.Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. Los tipos externos deben ir precedidos del nombre de la biblioteca entre corchetes.External types must be preceded by the library name in square brackets. El comando siguiente desensambla un método estático denominado MyMethod que tiene un parámetro de tipo AppDomain y un tipo de valor devuelto de AppDomain.The following command disassembles a static method named MyMethod that has one parameter of type AppDomain and has a return type of AppDomain.

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

Un tipo anidado debe ir precedido de su clase contenedora delimitada por una barra diagonal.A nested type must be preceded by its containing class, delimited by a forward slash. Por ejemplo, si la clase MyNamespace.MyClass contiene una clase anidada denominada NestedClass, la clase anidada se identifica de la siguiente manera: class MyNamespace.MyClass/NestedClass.For example, if the MyNamespace.MyClass class contains a nested class named NestedClass, the nested class is identified as follows: class MyNamespace.MyClass/NestedClass.

Vea tambiénSee also