Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se sono presenti file di origine C o C++ per l'applicazione, è possibile usare il debugger molto più potente se si esegue il debug in modalità di origine.
Tuttavia, esistono molte volte che non è possibile eseguire il debug di origine. È possibile che non siano presenti i file di origine per l'applicazione. È possibile eseguire il debug del codice di un altro utente. Potrebbe non aver compilato i file eseguibili con simboli .pdb completi. E anche se è possibile eseguire il debug di origine nell'applicazione, potrebbe essere necessario tracciare le routine di Microsoft Windows chiamate dall'applicazione o usate per caricare l'applicazione.
In queste situazioni, è necessario eseguire il debug in modalità assembly. Inoltre, la modalità assembly include molte funzionalità utili che non sono presenti nel debug di origine. Il debugger visualizza automaticamente il contenuto dei percorsi di memoria e i registri durante l'accesso e visualizza l'indirizzo del contatore del programma. Questa visualizzazione rende il debug degli assembly uno strumento prezioso che è possibile usare insieme al debug di origine.
Il debugger analizza principalmente il codice eseguibile binario. Anziché visualizzare questo codice in formato non elaborato, il debugger disassembla questo codice. Ovvero, il debugger converte il codice dal linguaggio del computer al linguaggio assembly.
È possibile visualizzare il codice risultante (noto come codice disassembly) in diversi modi:
Il comando u (Unassemble) disassembla e visualizza una sezione specificata del linguaggio del computer.
Il comando uf (Funzione Unassemble) disassembla e visualizza una funzione.
Il comando up (Smonta dalla Memoria Fisica) disassembla e visualizza una sezione specificata del linguaggio macchina memorizzato nella memoria fisica.
Il comando ur (Unassemble Real Mode BIOS) disassembla e visualizza un codice in modalità reale a 16 bit specificato.
Il comando ux (Unassemble x86 BIOS) disassembla e visualizza l'istruzione di codice BIOS basata su x86 impostata su un indirizzo specificato.
(solo WinDbg) La finestra disassembly disassembla e visualizza una sezione specificata del linguaggio del computer. questa finestra è automaticamente attiva se si seleziona il comando apertura automatica del disassembly nel menu finestra. è anche possibile aprire questa finestra selezionando disassembly nel menu di visualizzazione, premendo ALT+7 o premendo il pulsante disassembly (ALT+7).
La visualizzazione disassembly viene mostrata in quattro colonne: offset degli indirizzi, codice binario, mnemonico dell'assembly e dettagli del linguaggio di assembly. L'esempio seguente mostra questa visualizzazione.
0040116b 45 inc ebp
0040116c fc cld
0040116d 8945b0 mov eax,[ebp-0x1c]
A destra della riga che rappresenta il contatore del programma corrente, nella visualizzazione vengono visualizzati i valori di tutti i percorsi di memoria o i registri a cui si accede. Se questa riga contiene un'istruzione di ramo, viene visualizzata la notazione [br=1] o [br=0]. Questa notazione indica un ramo che è o non viene acquisito, rispettivamente.
È possibile usare il comando .asm (Cambia opzioni disassembly) per modificare la modalità di visualizzazione delle istruzioni disassemblate.
Nella finestra Disassembly di WinDbg la riga che rappresenta il contatore del programma corrente è evidenziata. Vengono evidenziate anche le righe in cui vengono impostati i punti di interruzione.
È anche possibile usare i comandi seguenti per modificare il codice dell'assembly:
Il comando # (cerca modello disassembly) cerca in un'area di memoria un modello specifico. Questo comando equivale alla ricerca delle quattro colonne della visualizzazione disassembly.
Il comando (Assembl) può accettare istruzioni sull'assembly e convertirle in codice binario del computer.
Il debugger ha due modalità operative diverse: modalità assembly e modalità di origine.
Quando si esegue un'istruzione singola in un'applicazione, le dimensioni di un singolo passaggio sono una riga di codice assembly o una riga di codice sorgente, a seconda della modalità.
Diversi comandi creano visualizzazioni di dati diverse a seconda della modalità.
In WinDbg, la finestra Disassembly si sposta automaticamente in primo piano quando si avvia o si esegue un'applicazione in modalità assembler. In modalità di origine, la finestra Origine passa in primo piano.
Per impostare la modalità, è possibile eseguire una delle operazioni seguenti:
Usare il comando l+, l- (Imposta opzioni di origine) per controllare la modalità. Il comando l-t attiva la modalità assembly.
(solo WinDbg) Deselezionare il comando Modalità origine dal menu Debug per fare in modo che il debugger entri in modalità assembly. È anche possibile selezionare il pulsante Modalità di origine disattivato sulla barra degli strumenti.
In WinDbg, quando si è in modalità assembly, ASM viene visualizzato sulla barra di stato.
Il menu di scelta rapida nella finestra Disassembly di WinDbg include il comando Evidenzia le istruzioni dalla riga di origine corrente. Questo comando evidenzia tutte le istruzioni che corrispondono alla riga di origine corrente. Spesso, una singola riga di origine corrisponde a più istruzioni di assembly. Se il codice è stato ottimizzato, queste istruzioni di assembly potrebbero non essere consecutive. Il comando Evidenzia istruzioni della riga di origine corrente consente di trovare tutte le istruzioni assemblate dalla riga di origine corrente.
Se l'applicazione è stata scritta nel linguaggio assembly, il disassembly prodotto dal debugger potrebbe non corrispondere esattamente al codice originale. In particolare, non saranno inclusi NO-OPs e commenti.
Per eseguire il debug del codice facendo riferimento ai file con estensione asm originali, è necessario usare il debug in modalità origine. È possibile caricare il file di assembly come un file di origine C o C++. Per altre informazioni su questo tipo di debug, vedere Debug in modalità origine.