Ildasm.exe (Disassembler IL)
Il Disassembler IL è uno strumento complementare all'assembler IL (Ilasm.exe). Ildasm.exe accetta un file eseguibile portabile (PE) che contiene codice IL (Intermediate Language) e crea un file di testo adatto come input per Ilasm.exe.
Viene installato automaticamente con Visual Studio. Per eseguire lo strumento, usare il prompt dei comandi per gli sviluppatori di Visual Studio o Visual Studio Developer PowerShell.
Al prompt dei comandi digitare quanto segue:
Sintassi
ildasm [options] [PEfilename] [options]
Parametri
Le opzioni seguenti sono disponibili per i file.exe, .dll, obj, lib e winmd .
Opzione | Descrizione |
---|---|
/out=filename |
Crea un file di output con filename 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. |
/Testo | Visualizza i risultati nella finestra della console, anziché in un'interfaccia utente grafica o in un file di output. |
/Html | Genera l'output in formato HTML. Valida solo con l'opzione /output. |
/? | Visualizza la sintassi e le opzioni dei comandi dello strumento. |
Le opzioni aggiuntive seguenti sono disponibili per i file.exe, .dlle winmd .
Opzione | Descrizione |
---|---|
/Byte | Mostra i byte effettivi, in formato esadecimale, come commenti di istruzioni. |
/caverbal | Genera blob di attributi personalizzati in forma descrittiva. Il formato predefinito è quello binario. |
/linenum | Include riferimenti alle righe di origine. |
/nobar | Evita la visualizzazione della finestra popup contenente l'indicatore di stato del processo del disassembler. |
/noca | Evita la generazione dell'output di attributi personalizzati. |
/Progetto | Mostra i metadati come vengono visualizzati nel codice gestito invece che nel Windows Runtime nativo. Se PEfilename non è un file di metadati di Windows (con estensione winmd), questa opzione non ha alcun effetto. Vedere Supporto .NET Framework per applicazioni Windows Store e Windows Runtime. |
/pubonly | Disassembla solo membri e tipi pubblici. Equivale a /visibility:PUB. |
/quoteallnames | Racchiude tutti i nomi tra virgolette singole. |
/raweh | Mostra le clausole di gestione delle eccezioni in formato non elaborato. |
/fonte | Mostra le righe di origine come commenti. |
/Token | Mostra i token dei metadati di classi e membri. |
/Visibilità:vis [+vis ...] |
Disassembla solo tipi o membri che presentano la visibilità specificata. Di seguito sono riportati i valori validi per vis :PUB - Pubblico PRI - Privato FAM - Famiglia ASM - Assembly FAA - Famiglia e assembly FOA - Famiglia o assembly PSC - Ambito privato Per le definizioni di questi modificatori di visibilità, vedere MethodAttributes e TypeAttributes. |
Le opzioni seguenti sono valide per i file.exe, .dlle winmd solo per l'output di file o console.
Opzione | Descrizione |
---|---|
/Tutti | Specifica una combinazione di opzioni /header, /bytes, /stats, /classlist e /token. |
/classlist | Include un elenco di classi definite nel modulo. |
/Avanti | Utilizza la dichiarazione con prototipo della classe. |
/Intestazioni | Include nell'output le informazioni sull'intestazione del file. |
/Elemento:class [::member [(sig ]] |
Disassembla quanto segue a seconda dell'argomento fornito: - Disassembla l'oggetto specificato class .- Disassembla l'oggetto specificato member dell'oggetto class .- Disassembla l'oggetto member class di 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, sig deve essere seguito da una parentesi chiusa: (sig) . A partire da .NET Framework 2.0 la parentesi di chiusura deve essere omessa: (sig . |
/noil | Evita l'output del codice dell'assembly IL. |
/Statistiche | Include le statistiche relative all'immagine. |
/typelist | Genera l'elenco completo dei tipi per mantenere l'ordinamento dei tipi in un round trip. |
/Unicode | Utilizza la codifica Unicode per l'output. |
/utf8 | Utilizza la codifica UTF-8 per l'output. ANSI è l'argomento predefinito. |
Le opzioni seguenti sono valide per i file.exe, .dll, obj, lib e winmd solo per l'output di file o console.
Opzione | Descrizione |
---|---|
/metadata[=specifier ] |
Mostra i metadati, dove specifier è:MDHEADER: visualizza le informazioni sull'intestazione e le dimensioni dei metadati. HEX: visualizza le informazioni in esadecimali e in testo normale. CSV: visualizza i conteggi di record e le dimensioni di heap. UNREX: visualizza i riferimenti esterni non risolti. SCHEMA: visualizza le informazioni sull'intestazione e lo schema dei metadati. RAW: visualizza le tabelle di metadati non elaborate. HEAPS: visualizza gli heap non elaborati. VALIDATE: convalida la coerenza dei metadati. È possibile specificare /metadata più volte, con valori diversi per specifier . |
Le opzioni seguenti sono valide solo per i file lib per l'output di file o console.
Opzione | Descrizione |
---|---|
/objectfile=filename |
Mostra i metadati di un singolo file oggetto nella libreria specificata. |
Nota
Tutte le opzioni per Ildasm.exe sono senza distinzione tra maiuscole e minuscole e riconosciute dalle prime tre lettere. Ad esempio, /quo equivale 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, ad esempio, equivale a /output=nomefile.
Commenti
Ildasm.exe funziona solo nei file PE su disco. e non su file installati nella Global Assembly Cache.
Il file di testo prodotto da Ildasm.exe può essere usato come input per l'assembler IL (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. Dopo aver compilato il codice e eseguito il relativo output tramite Ildasm.exe, il file di testo IL risultante può essere modificato a mano per aggiungere gli attributi mancanti. Sarà quindi possibile elaborare questo file di testo mediante l'assembler IL 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++.
È 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. Per usare la GUI, digitare ildasm alla riga di comando senza specificare l'argomento PEfilename né alcuna opzione. Dal menu File è possibile passare al file PE da 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 albero di tipo gerarchico, scegliere Esegui il dump di TreeView dal menu File. 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.
Se si fornisce Ildasm.exe con un argomento PEfilename contenente risorse incorporate, lo strumento produce 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. Se una risorsa non gestita è incorporata in PEfilename, viene generato un file con estensione res usando il nome del file specificato per l'output di IL dall'opzione /output .
Nota
Ildasm.exe mostra solo le descrizioni dei metadati per i file di input con estensione obj e lib . Il codice IL di questi tipi di file non viene disassemblato.
È possibile eseguire Ildasm.exetramite an.exe o .dll file per determinare se il file è gestito. 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.
Informazioni sulla versione
A partire da .NET Framework 4.5, Ildasm.exe gestisce un BLOB marshalling non riconosciuto (oggetto binario di grandi dimensioni) visualizzando il contenuto binario non elaborato. Ad esempio, il codice seguente mostra come viene visualizzato un BLOB di marshalling generato da un programma C#:
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 dell'interfaccia, come illustrato nell'estratto seguente dall'output Ildasm.exe :
.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 )
…
Esempio
Il comando seguente causa la visualizzazione dei metadati e del codice disassemblato per il file MyHello.exe
PE nella gui Ildasm.exepredefinita.
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.
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.
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:
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.
ildasm /item:MyClass::MyMethod MyFile.exe /text
Nell'esempio precedente potrebbero essere presenti più metodi denominati MyMethod
con firme diverse. Il comando seguente disassembla il metodo di istanza MyMethod
con il tipo restituito 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))
. A partire da .NET Framework 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 annidato deve essere preceduto dalla classe in cui è contenuto, delimitata da una barra. Se ad esempio nella classe MyNamespace.MyClass
è contenuta una classe annidata denominata NestedClass
, la classe annidata viene identificata come segue: class MyNamespace.MyClass/NestedClass
.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per