Decompilazione

Apri Strumenti > Opzioni (Tools > Options) per configurare la decompilazione. Quando si confrontano le impostazioni in modo interattivo, usa Decompilazione rapida senza cache; altrimenti rielabora il file dopo aver modificato un'opzione.

Impostazioni di decompilazione: debug, flusso di controllo, prototipi e indirizzi

Mostra comandi di debug (Show debug commands)

Per il P-Code VB classico, include le operazioni del compilatore e del debugger che altrimenti verrebbero omesse dal listato ad alto livello. Attivalo quando si ispeziona la sequenza di istruzioni sottostante anziché solo la logica del programma ricostruita.

Elabora blocchi If ... End If (Codice Nativo) (Process If ... End If blocks (Native Code))

Ricostruisce i salti condizionali riconosciuti del Native Code come blocchi If...End If. Disattivalo quando è necessario ispezionare il pattern di branching originale o investigare una procedura la cui struttura appare errata.

Elabora blocchi 'Else' (Process 'Else' blocks)

Utilizza euristiche aggiuntive per distinguere i rami Else dalle condizioni annidate e dai salti GoTo. Per il Native Code, ciò richiede l'elaborazione dei blocchi If. Mantienilo abilitato per la lettura normale; confronta i risultati con questa opzione disabilitata quando un ramo ricostruito è ambiguo.

Analizza prototipi (Analyze prototypes)

Esegue un'analisi euristica preliminare degli argomenti e dei valori di ritorno delle procedure. Questo è particolarmente utile con la Decompilazione rapida: le funzioni e le procedure private nei moduli standard possono mancare di metadati della firma espliciti. L'analisi preliminare richiede tempo aggiuntivo, ma evita di trattare una chiamata esclusivamente in base ai contenuti dello stack attualmente noti. Una firma euristica è comunque un'inferenza, specialmente quando i metadati, i tipi esterni o il codice sono incompleti.

Aggiungi Indirizzi (Add Addresses)

Visualizza gli indirizzi virtuali accanto alle istruzioni ricostruite. Mantienilo abilitato per correlare il codice con il disassemblaggio, i byte del file e le risultati di altri strumenti. È anche necessario per Copia nel disassemblatore (Copy to disassembler) per fondere le istruzioni ad alto livello con le loro controparti a basso livello. Lo Disassemblatore (Disassembler) visualizza sempre gli indirizzi indipendentemente da questa impostazione.

Comprensione della ricostruzione del Native Code

Il motore Native Code riconosce i pattern Select Case supportati, l'accesso ad array multidimensionali, le chiamate COM e le operazioni runtime VB. La gestione degli errori può essere ricostruita come On Error Resume Next, On Error GoTo e On Error GoTo 0. L'ottimizzazione del compilatore e le informazioni sui tipi mancanti possono comunque limitare il risultato; ispeziona il disassemblaggio quando l'output ad alto livello è incompleto.

La versione 26.2 ha espanso la tipizzazione Variant, la lettura e scrittura di SafeArray multidimensionali e la ricostruzione VarPtr per gli elementi dell'array. L'output può identificare un riferimento a un array come SafeArray, riflettendo la struttura runtime riconosciuta dal motore di analisi. L'isolamento dello stato del ramo e l'analisi delle variabili temporanee migliorano anche la ricostruzione di codice If/Else complesso. La versione 26.5 migliora ulteriormente la gestione di Select Case e le funzioni runtime VB5/VB6.

Informazioni sui tipi COM e ActiveX

VB Decompiler utilizza prima la sua base di conoscenza interna per le interfacce note. Per un oggetto COM esterno sconosciuto, può risolvere gli identificatori di libreria, classe e interfaccia tramite il registro di sistema e analizzare la corrispondente libreria di tipi DLL/OCX. Questo fornisce firme di metodo e proprietà, inclusi i tipi di interfaccia restituiti, per chiamate early-bound e late-bound supportate.

Se una libreria di tipi richiesta è assente o non può essere risolta tramite la registrazione, alcune chiamate possono rimanere non identificate, ad esempio come UnkVCall. Le dipendenze mancanti sono quindi rilevanti quando si confronta l'output tra macchine di analisi. La base di conoscenza IID espansa include automazione Office, ADO/DAO, XML e HTTP, scripting, shell, messaggistica e interfacce di servizio directory; non implica che ogni possibile chiamata COM possa essere risolta.

In alcuni file binari VB rimane solo una quantità limitata di metadati UDT. Il decompilatore può recuperare informazioni come la dimensione di una struttura e il conteggio dei campi stringa senza recuperare la disposizione originale completa dei campi. Non interpretare una dichiarazione parziale come una definizione a livello di sorgente completa.

Ricostruzione e ottimizzazione .NET

L'IL supportato è ricostruito come espressioni simili a C# e flusso di controllo. Il controllo Analizza e ottimizza le procedure (Procedure analyzer and optimizer) nella finestra principale può semplificare pattern supportati di loop, condizionali, operatori e variabili temporanee. Ispeziona l'IL e i metadati dove rimane un frammento non supportato o offuscato. Questa elaborazione è indipendente da Aiuto IA (AI Helper).