Disassembler MSIL (Ildasm.exe)

Aggiornamento: novembre 2007

Disassembler MSIL è uno strumento abbinato ad Assembler MSIL (Ilasm.exe). Ildasm.exe opera su un file eseguibile portabile (PE, Portable Executable) contenente codice MSIL (Microsoft Intermediate Language) e crea un file di testo adatto come input per Ilasm.exe.

ildasm [options] [PEfilename] [options]

Parametri

Le opzioni che seguono sono disponibili per i file EXE, DLL, OBJ e LIB.

Opzione

Descrizione

/output=nomefile

Crea un file di output con il nomefile specificato anziché visualizzare i risultati in un'interfaccia utente grafica.

/rtf

Genera l'output in formato RTF (Rich Text Format). Non è valida con l'opzione /text.

Questa è una nuova opzione di .NET Framework versione 2.0.

/text

Visualizza i risultati nella finestra di console, anziché in un'interfaccia utente grafica o come file di output.

/html

Genera l'output in formato HTML. È valida solo con l'opzione /output.

Questa è una nuova opzione di .NET Framework versione 2.0.

/?

Visualizza la sintassi e le opzioni dei comandi dello strumento.

Le altre opzioni che seguono sono disponibili per i file EXE e DLL.

Opzione

Descrizione

/bytes

Indica i byte effettivi, in formato esadecimale, come commenti di istruzioni.

/caverbal

Genera blob di attributo personalizzato in forma descrittiva. La forma predefinita è quella binaria.

Questa è una nuova opzione di .NET Framework versione 2.0.

/linenum

Include riferimenti alle righe di origine.

/nobar

Evita la visualizzazione della finestra popup contenente l'indicatore di stato del disassembler.

/noca

Evita la generazione dell'output di attributi personalizzati.

Questa è una nuova opzione di .NET Framework versione 2.0.

/pubonly

Disassembla solo membri e tipi pubblici. Equivale a /visibility:PUB.

/quoteallnames

Racchiude tutti i nomi tra virgolette singole.

/raweh

Indica clausole di gestione delle eccezioni in formato non elaborato.

/source

Indica le righe di origine come commenti.

/tokens

Indica i token dei metadati di classi e membri.

/visibility:vis[+vis...]

Disassembla solo tipi o membri che presentano la visibilità specificata. Di seguito sono riportati i valori validi per vis:

PUB (Public)

PRI (Private)

FAM (Family)

ASM (Assembly)

FAA (Family and Assembly)

FOA (Family or Assembly)

PSC (Private Scope)

Per le definizioni di questi modificatori di visibilità, vedere MethodAttributes e TypeAttributes.

Le opzioni che seguono sono valide per i file EXE e DLL e per il solo output su file o su console.

Opzione

Descrizione

/all

Specifica una combinazione delle opzioni /header, /bytes, /stats, /classlist e /tokens.

Nota

In .NET Framework versioni 1.0 e 1.1, specifica una combinazione delle opzioni /header, /bytes e /tokens.

/classlist

Include un elenco di classi definite nel modulo.

Questa è una nuova opzione di .NET Framework versione 2.0.

/forward

Utilizza la dichiarazione con prototipo della classe.

Questa è una nuova opzione di .NET Framework versione 2.0.

/header

Include nell'output le informazioni sull'intestazione del file.

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

Disassembla quanto segue a seconda dell'argomento fornito:

  • Disassembla la classe specificata.

  • Disassembla l'elemento member specificato della classe.

  • Disassembla l'elemento member della classe con la firma sig specificata. Il formato di sig è il seguente:

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

    Nota   In .NET Framework versioni 1.0 e 1.1 la firma sig deve essere seguita da una parentesi di chiusura: (sig). Nella versione 2.0 la parentesi di chiusura deve essere omessa: (sig.

/noil

Evita la visualizzazione dell'output del codice assembly MSIL.

/stats

Include le statistiche relative all'immagine.

Questa è una nuova opzione di .NET Framework versione 2.0.

/typelist

Genera l'elenco completo dei tipi per mantenere l'ordinamento dei tipi in un round trip.

Questa è una nuova opzione di .NET Framework versione 2.0.

/unicode

Utilizza la codifica Unicode per l'output.

/utf8

Utilizza la codifica UTF-8 per l'output. ANSI è il valore predefinito.

Le opzioni che seguono sono valide per i file EXE, DLL, OBJ e LIB solo per l'output su file o console.

Opzione

Descrizione

/metadata[=specifier]

Mostra i metadati, dove specifier è:

MDHEADER: mostra le informazioni sull'intestazione e le dimensioni dei metadati.

HEX: mostra le informazioni in esadecimali e in parole.

CSV: mostra i conteggi di record e le dimensioni heap.

UNREX: mostra riferimenti esterni non risolti.

SCHEMA: mostra le informazioni sull'intestazione e lo schema dei metadati.

RAW: mostra le tabelle di metadati non elaborate.

HEAPS: mostra gli heap non elaborati.

VALIDATE: convalida l'uniformità dei metadati.

È possibile specificare /metadata più volte, con valori differenti per specifier.

Questa è una nuova opzione di .NET Framework versione 2.0.

Le opzioni che seguono sono valide per i file LIB e per il solo output su file o su console.

Opzione

Descrizione

/objectfile=filename

Mostra i metadati di un singolo file oggetto nella libreria specificata.

Questa è una nuova opzione di .NET Framework versione 2.0.

Nota

Per tutte le opzioni di Ildasm.exe l'esatta combinazione di maiuscole e minuscole non è rilevante ed inoltre tali opzioni vengono riconosciute dalle prime tre lettere. /quo equivale ad esempio a /quoteallnames. Le opzioni che specificano argomenti accettano i due punti (:) o un segno di uguale (=) come separatore tra l'opzione e l'argomento. /output:nomefile equivale ad esempio a /output=nomefile.

Note

Ildasm.exe opera solo su file PE su disco e non su file installati nella Global Assembly Cache.

Il file di testo prodotto da Ildasm.exe è utilizzabile come input per Assembler MSIL (Ilasm.exe). Questo è utile, ad esempio, quando si compila del codice in un linguaggio di programmazione che non supporta tutti gli attributi di metadati del runtime. Dopo aver compilato il codice ed eseguito l'output tramite Ildasm.exe, il file di testo MSIL ottenuto potrà essere modificato manualmente per aggiungere gli attributi mancanti. Sarà quindi possibile eseguire questo file di testo mediante Assembler MSIL per produrre un file eseguibile finale.

Nota

Attualmente non è possibile avvalersi di questa tecnica con file PE contenenti codice nativo incorporato, ad esempio file PE prodotti da Visual C++ .NET.

È possibile utilizzare la GUI predefinita di Disassembler MSIL per visualizzare i metadati e il codice disassemblato di qualsiasi file PE esistente in una visualizzazione struttura di tipo gerarchico. Per utilizzare la GUI, digitare ildasm alla riga di comando senza fornire l'argomento PEfilename né alcuna opzione. Dal menu File è possibile selezionare il file PE che si desidera caricare in Ildasm.exe. Per salvare i metadati e il codice disassemblato visualizzati per il file PE selezionato, scegliere il comando Dump dal menu File. Per salvare solo la visualizzazione struttura gerarchica, scegliere Esegui il dump di TreeView dal menu File. Per una guida dettagliata per il caricamento dei file in Ildasm.exe e per l'interpretazione dell'output, vedere l'esercitazione di Ildasm.exe, contenuta nella cartella Samples fornita con Windows Software Development Kit (SDK).

Se si fornisce a Ildasm.exe un argomento PEfilename che contiene risorse incorporate, lo strumento produrrà più file di output: un file di testo contenente codice MSIL e, per ciascuna risorsa gestita incorporata, un file RESOURCES prodotto utilizzando il nome della risorsa dai metadati. Se in PEfilename è incorporata una risorsa non gestita, verrà prodotto un file RES utilizzando il nome file specificato dall'opzione /output per l'output MSIL*.*

Nota

In Ildasm.exe sono presenti solo descrizioni di metadati per i file di input OBJ e LIB. Il codice MSIL di questi tipi di file non viene disassemblato.

Per determinare se il file è gestito è possibile eseguire Ildasm.exe su un file EXE o DLL. 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. Se invece il file è gestito, l'operazione verrà eseguita correttamente.

Esempi

Il comando che segue fa sì che i metadati e il codice disassemblato del file PE MyHello.exe vengano visualizzati nella GUI predefinita di Ildasm.exe.

ildasm myHello.exe

Il comando che segue disassembla il file MyFile.exe e archivia nel file MyFile.il il testo ottenuto per Assembler MSIL.

ildasm MyFile.exe /output:MyFile.il

Il comando che segue disassembla il file MyFile.exe e visualizza nella finestra di console il testo ottenuto per MSIL Assembler.

ildasm MyFile.exe /text

Se il file MyApp.exe contiene risorse incorporate gestite e non gestite, il comando che segue produrrà quattro file: MyApp.il, MyApp.res, Icons.resources, e Message.resources.

ildasm MyApp.exe /output:MyApp.il

Il comando che segue disassembla il metodo MyMethod nella classe MyClass di MyFile.exe e visualizza l'output nella finestra di console.

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

Nell'esempio precedente potrebbero essere presenti più metodi denominati MyMethod con firme diverse. Il comando che segue disassembla il metodo di istanza MyMethod con il tipo restituito di void e i tipi di parametri int32 e 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 .NET Framework versione 2.0 la parentesi di chiusura deve essere omessa: MyMethod(instance void(int32).

Per recuperare un metodo static (metodoShared in Visual Basic), omettere la parola chiave 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. I tipi esterni devono essere preceduti dal nome della libreria tra parentesi quadre. Il comando che segue disassembla un metodo statico denominato MyMethod che ha un parametro di tipo AppDomain e un tipo restituito di AppDomain.

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

Un tipo nidificato deve essere preceduto dalla classe in cui è contenuto, delimitata da una barra. Se ad esempio nella classe MyNamespace.MyClass è contenuta una classe nidificata denominata NestedClass, la classe nidificata viene identificata come segue: class MyNamespace.MyClass/NestedClass.

Vedere anche

Concetti

Compilazione in MSIL

Riferimenti

Strumenti di .NET Framework

Assembler MSIL (Ilasm.exe)

Prompt dei comandi di SDK