Ildasm.exe (Disassembler IL)Ildasm.exe (IL Disassembler)

Il disassembler IL è uno strumento complementare all'assembler IL (Ilasm.exe).The IL Disassembler is a companion tool to the IL Assembler (Ilasm.exe). Ildasm.exe accetta un file eseguibile di tipo PE contenente codice di linguaggio intermedio (IL) e crea un file di testo adatto come input per 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.

Viene installato automaticamente con Visual Studio.This tool is automatically installed with Visual Studio. Per eseguire lo strumento, usare il Prompt dei comandi per gli sviluppatori per Visual Studio (o il prompt dei comandi di Visual Studio in Windows 7).To run the tool, use the Developer Command Prompt for Visual Studio (or the Visual Studio Command Prompt in Windows 7). Per altre informazioni, vedere Prompt dei comandi.For more information, see Command Prompts.

Al prompt dei comandi digitare quanto segue:At the command prompt, type the following:

SintassiSyntax

ildasm [options] [PEfilename] [options]

ParametriParameters

Le opzioni che seguono sono disponibili per i file .exe, .dll, .obj, .lib e .winmd.The following options are available for .exe, .dll, .obj, .lib, and .winmd files.

OpzioneOption DescrizioneDescription
/out = filename/out= filename Crea un file di output con filename specificato anziché visualizzare i risultati in un'interfaccia utente grafica.Creates an output file with the specified filename, rather than displaying the results in a graphical user interface.
/rtf/rtf Genera l'output in formato RTF (Rich Text Format).Produces output in rich text format. Non valida con l'opzione /text.Invalid with the /text option.
/text/text Visualizza i risultati nella finestra della console, anziché in un'interfaccia utente grafica o in un file di output.Displays the results to the console window, rather than in a graphical user interface or as an output file.
/html/html Genera l'output in formato HTML.Produces output in HTML format. Valida solo con l'opzione /output.Valid with the /output option only.
/?/? Visualizza la sintassi e le opzioni dei comandi dello strumento.Displays the command syntax and options for the tool.

Le altre opzioni che seguono sono disponibili per i file .exe, .dll e .winmd.The following additional options are available for .exe, .dll, and .winmd files.

OpzioneOption DESCRIZIONEDescription
/bytes/bytes Mostra i byte effettivi, in formato esadecimale, come commenti di istruzioni.Shows actual bytes, in hexadecimal format, as instruction comments.
/caverbal/caverbal Genera blob di attributi personalizzati in forma descrittiva.Produces custom attribute blobs in verbal form. Il formato predefinito è quello binario.The default is binary form.
/linenum/linenum Include riferimenti alle righe di origine.Includes references to original source lines.
/nobar/nobar Evita la visualizzazione della finestra popup contenente l'indicatore di stato del processo del disassembler.Suppresses the disassembly progress indicator pop-up window.
/noca/noca Evita la generazione dell'output di attributi personalizzati.Suppresses the output of custom attributes.
/project/project Mostra i metadati come vengono visualizzati nel codice gestito invece che nel Windows Runtime nativo.Displays metadata the way it appears to managed code, instead of the way it appears in the native Windows Runtime. Se PEfilename non è un file di metadati Windows ( .winmd), questa opzione non ha effetto.If PEfilename is not a Windows metadata (.winmd) file, this option has no effect. Vedere Supporto .NET Framework per applicazioni Windows Store e Windows Runtime.See .NET Framework Support for Windows Store Apps and Windows Runtime.
/pubonly/pubonly Disassembla solo membri e tipi pubblici.Disassembles only public types and members. Equivale a /visibility:PUB.Equivalent to /visibility:PUB.
/quoteallnames/quoteallnames Racchiude tutti i nomi tra virgolette singole.Includes all names in single quotes.
/raweh/raweh Mostra le clausole di gestione delle eccezioni in formato non elaborato.Shows exception handling clauses in raw form.
/source/source Mostra le righe di origine come commenti.Shows original source lines as comments.
/tokens/tokens Mostra i token dei metadati di classi e membri.Shows metadata tokens of classes and members.
/visibility: vis[+vis...]/visibility: vis[+vis...] Disassembla solo tipi o membri che presentano la visibilità specificata.Disassembles only types or members with the specified visibility. Di seguito sono riportati i valori validi per vis:The following are valid values for vis:

PUB - PubblicoPUB — Public

PRI - PrivatoPRI — Private

FAM - FamigliaFAM — Family

ASM - AssemblyASM — Assembly

FAA - Famiglia e assemblyFAA — Family and Assembly

FOA - Famiglia o assemblyFOA — Family or Assembly

PSC - Ambito privatoPSC — Private Scope

Per le definizioni di questi modificatori di visibilità, vedere MethodAttributes e TypeAttributes.For definitions of these visibility modifiers, see MethodAttributes and TypeAttributes.

Le opzioni che seguono sono valide per i file .exe, .dll e .winmd solo per l'output su file o su console.The following options are valid for .exe, .dll, and .winmd files for file or console output only.

OpzioneOption DESCRIZIONEDescription
/all/all Specifica una combinazione di opzioni /header, /bytes, /stats, /classlist e /token.Specifies a combination of the /header, /bytes, /stats, /classlist, and /tokens options.
/classlist/classlist Include un elenco di classi definite nel modulo.Includes a list of classes defined in the module.
/forward/forward Utilizza la dichiarazione con prototipo della classe.Uses forward class declaration.
/headers/headers Include nell'output le informazioni sull'intestazione del file.Includes file header information in the output.
/item: class[ :: member[(sig]]/item: class[:: member[(sig]] Disassembla quanto segue a seconda dell'argomento fornito:Disassembles the following depending upon the argument supplied:

- Disassembla l'oggetto class specificato.- Disassembles the specified class.
- Disassembla l'oggetto member di class specificato.- Disassembles the specified member of the class.
- Disassembla l'oggetto member di class con la firma sig specificata.- Disassembles the member of the class with the specified signature sig. Il formato di sig è il seguente:The format of sig is:
[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)[instance] returnType(parameterType1, parameterType2, …, parameterTypeN)
Nota Nelle versioni 1.0 e 1.1 di .NET Framework sig deve essere seguito da una parentesi di chiusura: (sig).Note In the .NET Framework versions 1.0 and 1.1, sig must be followed by a closing parenthesis: (sig). A partire da .NET Framework 2.0 la parentesi di chiusura deve essere omessa: (sig.Starting with the Net Framework 2.0 the closing parenthesis must be omitted: (sig.
/noil/noil Evita l'output del codice dell'assembly IL.Suppresses IL assembly code output.
/stats/stats Include le statistiche relative all'immagine.Includes statistics on the image.
/typelist/typelist Genera l'elenco completo dei tipi per mantenere l'ordinamento dei tipi in un round trip.Produces the full list of types, to preserve type ordering in a round trip.
/unicode/unicode Utilizza la codifica Unicode per l'output.Uses Unicode encoding for the output.
/utf8/utf8 Utilizza la codifica UTF-8 per l'output.Uses UTF-8 encoding for the output. ANSI è l'argomento predefinito.ANSI is the default.

Le opzioni che seguono sono valide per i file .exe, .dll, .obj, .lib e .winmd solo per l'output su file o console.The following options are valid for .exe, .dll, .obj, .lib, and .winmd files for file or console output only.

OpzioneOption DescrizioneDescription
/metadata[=specifier]/metadata[=specifier] Mostra i metadati, dove specifier è:Shows metadata, where specifier is:

MDHEADER: visualizza le informazioni sull'intestazione e le dimensioni dei metadati.MDHEADER — Show the metadata header information and sizes.

HEX: visualizza le informazioni in esadecimali e in testo normale.HEX — Show information in hex as well as in words.

CSV: visualizza i conteggi di record e le dimensioni di heap.CSV — Show the record counts and heap sizes.

UNREX: visualizza i riferimenti esterni non risolti.UNREX — Show unresolved externals.

SCHEMA: visualizza le informazioni sull'intestazione e lo schema dei metadati.SCHEMA — Show the metadata header and schema information.

RAW: visualizza le tabelle di metadati non elaborate.RAW — Show the raw metadata tables.

HEAPS: visualizza gli heap non elaborati.HEAPS — Show the raw heaps.

VALIDATE: convalida la coerenza dei metadati.VALIDATE — Validate the consistency of the metadata.

È possibile specificare /metadata più volte, con valori diversi per specifier.You can specify /metadata multiple times, with different values for specifier.

Le opzioni che seguono sono valide per i file .lib solo per l'output su file o su console.The following options are valid for .lib files for file or console output only.

OpzioneOption DescrizioneDescription
/objectfile=filename/objectfile=filename Mostra i metadati di un singolo file oggetto nella libreria specificata.Shows the metadata of a single object file in the specified library.

Nota

Tutte le opzioni per Ildasm.exe non sono soggette alla distinzione tra maiuscole e minuscole e vengono riconosciute dalle prime tre lettere.All options for Ildasm.exe are case-insensitive and recognized by the first three letters. Ad esempio, /quo equivale a /quoteallnames.For example, /quo is equivalent to /quoteallnames. Le opzioni che specificano argomenti accettano i due punti (:) o un segno di uguale (=) come separatore tra l'opzione e l'argomento.Options that specify arguments accept either a colon (:) or an equal sign (=) as the separator between the option and the argument. /output: nomefile, ad esempio, equivale a /output= nomefile.For example, /output: filename is equivalent to /output= filename.

NoteRemarks

Ildasm.exe opera solo su file di tipo PE su disco.Ildasm.exe only operates on PE files on disk. e non su file installati nella Global Assembly Cache.It does not operate on files installed in the global assembly cache.

Il file di testo prodotto da Ildasm.exe può essere utilizzato come input per l'assembler IL(Ilasm.exe).The text file produced by Ildasm.exe can be used as input to the IL Assembler (Ilasm.exe). Questo è utile, ad esempio, quando si compila codice in un linguaggio di programmazione che non supporta tutti gli attributi dei metadati del runtime.This is useful, for example, when compiling code in a programming language that does not support all the runtime metadata attributes. Dopo aver compilato il codice ed eseguito l'output tramite Ildasm.exe, il file di testo IL ottenuto potrà essere modificato manualmente per aggiungere gli attributi mancanti.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. Sarà quindi possibile elaborare questo file di testo mediante l'assembler IL per produrre un file eseguibile finale.You can then run this text file through the IL Assembler to produce a final executable file.

Nota

Attualmente non è possibile avvalersi di questa tecnica con file PE contenenti codice nativo incorporato, ad esempio file PE prodotti da Visual C++.Currently, you cannot use this technique with PE files that contain embedded native code (for example, PE files produced by Visual C++).

È possibile utilizzare la GUI predefinita del disassembler IL per visualizzare i metadati e il codice disassemblato di qualsiasi file PE esistente in una visualizzazione albero di tipo gerarchico.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. Per usare la GUI, digitare ildasm alla riga di comando senza specificare l'argomento PEfilename né alcuna opzione.To use the GUI, type ildasm at the command line without supplying the PEfilename argument or any options. Dal menu File è possibile passare al file di tipo PE che si vuole caricare in Ildasm.exe.From the File menu, you can navigate to the PE file that you want to load into Ildasm.exe. Per salvare i metadati e il codice disassemblato visualizzati per il file PE selezionato, scegliere il comando Dump dal menu File.To save the metadata and disassembled code displayed for the selected PE, select the Dump command from the File menu. Per salvare solo la visualizzazione albero di tipo gerarchico, scegliere Esegui il dump di TreeView dal menu File.To save the hierarchical tree view only, select the Dump Treeview command from the File menu. Per una guida dettagliata sul caricamento di un file in Ildasm.exe e sull'interpretazione dell'output, vedere l'esercitazione di Ildasm.exe, contenuta nella cartella Samples inclusa in 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.

Se si specifica per Ildasm.exe un argomento PEfilename che contiene risorse incorporate, lo strumento produrrà più file di output: un file di testo contenente codice IL e, per ogni risorsa gestita incorporata, un file con estensione resources prodotto usando il nome della risorsa dai metadati.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. Se in PEfilename è incorporata una risorsa non gestita, verrà prodotto un file con estensione res usando il nome file specificato dall'opzione /output per l'output 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 mostra solo descrizioni di metadati per i file di input .obj e .lib.Ildasm.exe shows only metadata descriptions for .obj and .lib input files. Il codice IL di questi tipi di file non viene disassemblato.IL code for these file types is not disassembled.

Per determinare se il file è gestito è possibile eseguire Ildasm.exe su un file .exe o .dll .You can run Ildasm.exe over an.exe or .dll file to determine whether the file is managed. Se il file non è gestito, verrà visualizzato un messaggio che comunica che il file non include alcuna intestazione Common Language Runtime valida e non può essere disassemblato.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. Se invece il file è gestito, l'operazione verrà eseguita correttamente.If the file is managed, the tool runs successfully.

Informazioni sulla versioneVersion Information

A partire da .NET Framework 4.5, Ildasm.exe gestisce un BLOB (oggetto binario di grandi dimensioni) di marshalling non riconosciuto visualizzando il contenuto binario non elaborato.Starting with the .NET Framework 4.5, Ildasm.exe handles an unrecognized marshal BLOB (binary large object) by displaying the raw binary content. Ad esempio, il codice seguente mostra come viene visualizzato un BLOB di marshalling generato da un programma 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 partire da .NET Framework 4.5, Ildasm.exe visualizza gli attributi applicati alle implementazioni di interfaccia, come illustrato nel seguente estratto dell'output di 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 )
      …

EsempiExamples

Il comando che segue visualizza i metadati e il codice disassemblato del file di tipo PE MyHello.exe nella GUI predefinita di 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

Il comando che segue disassembla il file MyFile.exe e archivia nel file MyFile.il il testo ottenuto per l'assembler 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

Il comando che segue disassembla il file MyFile.exe e visualizza nella finestra della console il testo ottenuto per l'assembler IL.The following command disassembles the file MyFile.exe and displays the resulting IL Assembler text to the console window.

ildasm MyFile.exe /text

Se il file MyApp.exe contiene risorse incorporate gestite e non gestite, il comando seguente produrrà quattro file: MyApp.il, MyApp.res, Icons.resources e 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

Il comando seguente disassembla il metodo MyMethod della classe MyClass in MyFile.exe e visualizza l'output nella finestra della console.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

Nell'esempio precedente potrebbero essere presenti più metodi denominati MyMethod con firme diverse.In the previous example, there could be several methods named MyMethod with different signatures. Il comando seguente disassembla il metodo di istanza MyMethod con il tipo restituito void e i tipi di parametri int32 e 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

In .NET Framework versioni 1.0 e 1.1 la parentesi sinistra che segue il nome del metodo deve essere bilanciata da una parentesi destra dopo 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 partire da .NET Framework 2.0 la parentesi di chiusura deve essere omessa: MyMethod(instance void(int32).Starting with the .NET Framework 2.0 the closing parenthesis must be omitted: MyMethod(instance void(int32).

Per recuperare un metodo static (metodoShared in Visual Basic), omettere la parola chiave instance.To retrieve a static method (Shared method in Visual Basic), omit the keyword instance. I tipi di classe che non sono tipi primitivi come int32 e string devono includere lo spazio dei nomi e devono essere preceduti dalla parola chiave class.Class types that are not primitive types like int32 and string must include the namespace and must be preceded by the keyword class. I tipi esterni devono essere preceduti dal nome della libreria tra parentesi quadre.External types must be preceded by the library name in square brackets. Il comando che segue disassembla un metodo statico denominato MyMethod che ha un parametro di tipo AppDomain e un tipo restituito di 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 annidato deve essere preceduto dalla classe in cui è contenuto, delimitata da una barra.A nested type must be preceded by its containing class, delimited by a forward slash. Se ad esempio nella classe MyNamespace.MyClass è contenuta una classe annidata denominata NestedClass, la classe annidata viene identificata come segue: 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.

Vedere ancheSee also