Ghidra Downloadguida indipendente al download e all’installazione
Italiano
GHIDRA DEBUGGER

Guida al debugger di Ghidra: avviare, collegarsi ed eseguire il codice passo passo

Sì: Ghidra include un Debugger per l'analisi dinamica. Questa guida spiega come preparare un target di esercitazione autorizzato, avviarlo tramite GDB, collegarsi quando necessario, impostare breakpoint, eseguire le istruzioni passo passo, controllare registri e thread e riportare lo stato in esecuzione a CodeBrowser e Decompiler.

Documentazione ufficiale del Debugger
LivelloPrincipiante
FlussoGDB + Trace
Ghidra12.1.2
Verificato06/08/2026
RISPOSTA BREVE

Ghidra ha un debugger?

Sì. Ghidra dispone di un framework Debugger che può avviare o collegarsi a un target in esecuzione, registrare un trace, mostrare registri e memoria e seguire l'esecuzione con breakpoint e step. Il Debugger non sostituisce il Decompiler: il Decompiler interpreta un programma staticamente, mentre il Debugger consente di osservare uno stato di esecuzione alla volta.

Per la prima sessione, considera il flusso come tre viste collegate. GDB o un altro target agent supportato controlla il processo, Ghidra registra i cambiamenti come trace e il programma statico fornisce nomi, funzioni e contesto. Le conclusioni più utili nascono dal confronto tra tutte e tre le viste, non dall'affidarsi a un solo pannello.

Usa un campione autorizzato

Esegui il debug solo di programmi che possiedi, che hai il permesso di ispezionare o che sono esplicitamente autorizzati per la formazione. Conserva i file sconosciuti in una macchina virtuale isolata o in un laboratorio usa e getta e non eseguire campioni non attendibili su una workstation che contiene credenziali personali.

PRIMA DI INIZIARE

Prepara Ghidra, GDB e un laboratorio di pratica sicuro

La verifica attuale del sito ha trovato Ghidra 12.1.2 nel release ufficiale di NationalSecurityAgency/ghidra il 6 agosto 2026. Il release è stato pubblicato il 5 giugno 2026 e continua a usare il requisito JDK 21 a 64 bit riportato nella guida all'installazione. Su una macchina pulita, installa prima l'archivio ufficiale e verifica che Ghidra si avvii prima di cercare problemi nel Debugger.

Gli esempi del Debugger usano un target nativo e concetti GDB. I campi esatti del launcher variano in base al sistema operativo e al target agent, ma i punti decisionali restano gli stessi: selezionare l'architettura corretta, mantenere semplice il percorso del campione, registrare gli argomenti della riga di comando e distinguere tra avvio locale, attach a un processo esistente e connessione a un server GDB remoto.

  • Usa un eseguibile piccolo con input e output prevedibili.
  • Conserva il file originale, l'hash e il progetto Ghidra in cartelle separate.
  • Se il target è sconosciuto, inizia dall'analisi statica; l'esecuzione dinamica è facoltativa.
  • Consulta il corso ufficiale Ghidra Debugger quando ti serve un esempio specifico per il target agent.
NecessitàPerché contaControllo rapido
Ghidra 12.1.2Interfaccia del Debugger e del traceApri Ghidra normalmente
JDK 21 a 64 bitEsegue l'applicazione JavaControlla java -version
GDB o target agentControlla il processo in esecuzioneEsegui gdb --version
Campione autorizzatoMantiene l'esercitazione conformeUsa un binario di laboratorio
Simboli, quando disponibiliRendono le funzioni più leggibiliConserva file di debug corrispondenti
PASSO 1

Avvia il primo target con Ghidra Debugger

Crea un Non-Shared Project e importa l'eseguibile di pratica, così Ghidra può costruire la vista statica del programma. Poi apri lo strumento Debugger dall'ambiente del progetto. Il primo obiettivo non è ricostruire un codice sorgente perfetto, ma dimostrare che il target si avvia, che l'architettura è corretta e che il trace riceve uno stato utile.

Scegli il launcher GDB locale e controlla ogni campo prima di premere Launch. Image è il file target, Arguments sono i valori esatti della riga di comando, gdb command seleziona l'eseguibile del debugger e Architecture ed Endian devono corrispondere al campione. Se non sei sicuro, verifica formato del file e processore invece di ripetere un avvio configurato male.

  1. 1

    Crea il progetto

    Apri la finestra del progetto, scegli File > New Project, seleziona Non-Shared Project e salvalo in una cartella di laboratorio usa e getta. Importa lo stesso file che vuoi avviare.

  2. 2

    Apri Debugger

    Avvia lo strumento Debugger e scegli l'azione launcher o target agent adatta al tuo ambiente. Tieni aperto il programma statico per confrontarlo con il trace.

  3. 3

    Controlla i campi del launcher

    Imposta percorso dell'immagine, argomenti, comando GDB, architettura, endianness ed eventuali valori inferior TTY o di ambiente. Nel primo percorso di laboratorio evita spazi e metacaratteri della shell.

  4. 4

    Avvia e metti in pausa

    Avvia il target, attendi il primo stop e conferma che thread, program counter, Listing e stato del Debug Console siano visibili prima dello step.

Area di lavoro del Ghidra Debugger dopo l'avvio con Listing dinamico, Debug Console, stack, thread e pannelli dei breakpoint
Screenshot dalla documentazione ufficiale di Ghidra: target dopo l'avvio con Listing, console, stack, thread e breakpoint visibili.
PASSO 2

Collegati a un processo o a un target remoto

L'avvio pone il target sotto il controllo del debugger. L'attach parte da un processo già in esecuzione, mentre una connessione remota usa un target agent come un server GDB o un workflow remoto supportato. Queste modalità sono utili, ma aggiungono variabili di permessi, architettura, spazio degli indirizzi e rete. Fai funzionare prima un avvio locale prima di passare ad attach o debug remoto.

Per una sessione attach, identifica il processo tramite un workflow di laboratorio autorizzato, seleziona il connettore corretto e verifica l'architettura del processo. Per un target remoto, controlla host, porta, versione del debugger server, file di simboli e confine di fiducia. Una connessione può riuscire mentre il trace resta incompleto se il target agent non espone registri, memoria o mappature dei moduli.

Il debug remoto è un confine di rischio separato

Non esporre un debugger server a una rete non attendibile. Usa una rete privata di laboratorio, autenticazione o un tunnel sicuro quando opportuno e chiudi il listener al termine dell'esercitazione.

  1. 1

    Scegli la modalità di connessione

    Usa Launch per un nuovo processo locale, Attach per un processo locale già esistente o un workflow remoto per un server GDB o un altro agent supportato.

  2. 2

    Abbina il target

    Controlla processore, endianness, presupposti del sistema operativo e spazio degli indirizzi. Carica simboli corrispondenti se il target è stripped o ottimizzato.

  3. 3

    Convalida il primo stop

    Controlla thread, program counter, moduli e output della console. Se compare solo un banner di connessione, considera la sessione incompleta finché lo stato non viene popolato.

LEGGI L'INTERFACCIA

Impara a usare l'area di lavoro del Debugger senza perderti

L'area di lavoro del Debugger è densa perché mostra diverse versioni dello stesso stato di esecuzione. Parti dal program counter e dal thread selezionato, poi usa i pannelli vicini per rispondere a una domanda alla volta. Se il target è sconosciuto, non aprire tutte le viste insieme: un ciclo piccolo e ripetibile è più facile da diagnosticare.

La vista Registers è un'istantanea dello stato, non una spiegazione di alto livello. Un registro modificato mostra cosa ha osservato il target in uno stop. Per capire perché è cambiato, controlla l'istruzione nel Listing, lo stack o la memoria vicina e il rapporto chiamante/chiamato nel programma statico.

FinestraCosa mostraPrima azione utile
Debug ConsoleMessaggi e comandi del target agentControlla gli errori di launch o attach
Dynamic ListingIstruzioni nello stato corrente del traceSegui il program counter
BreakpointsStop attivi ed effettiviConferma lo stato del breakpoint
RegistersValori e rappresentazioni dei registriConfronta prima e dopo uno step
Threads / StackPercorsi di esecuzione e frame di chiamataSeleziona il thread interessante
MemoryByte e regioni mappateIspeziona un indirizzo referenziato
Finestra Registers del Ghidra Debugger con nomi, valori, tipi e rappresentazioni dei registri
Screenshot dalla documentazione ufficiale di Ghidra: una vista dello stato Registers.
PASSO 3

Imposta breakpoint ed esegui il codice passo passo

Un breakpoint è utile solo quando si ferma in una posizione che sai spiegare. Parti dall'entry point, da una funzione nota o da un branch collegato all'input di pratica. Dopo lo stop, usa Resume per continuare, Interrupt per riprendere il controllo, Step Into per entrare in una chiamata, Step Over per mantenere il livello corrente e Step Out per tornare al chiamante. Le icone della toolbar possono cambiare: affidati al nome dell'azione e allo stato del thread.

Se un breakpoint è presente ma non diventa mai effettivo, controlla se il target ha raggiunto il modulo, se l'indirizzo è mappato, se i permessi consentono lo stop e se la mappatura statico-dinamica è corretta. Un breakpoint su una funzione ottimizzata o inline può richiedere un'istruzione vicina o una posizione basata sui simboli.

  • Imposta prima un solo breakpoint; diversi breakpoint pending rendono più difficile leggere la prima sessione.
  • Registra program counter, thread selezionato e registro rilevante prima dello step.
  • Dopo ogni stop significativo, annota input, branch, valore di memoria e conclusione.
  • Rimuovi o disabilita i breakpoint temporanei prima di consegnare il progetto a qualcun altro.
COLLEGA LE VISTE

Mappa lo stato in esecuzione a CodeBrowser e Decompiler

Il Debugger è molto più utile quando il trace e il programma statico importato sono mappati. Usa indirizzo corrente, modulo, funzione e byte dell'istruzione per trovare lo stesso codice in CodeBrowser. Poi leggi il Decompiler come un'ipotesi: può mostrare il flusso di controllo e le variabili probabili, ma resta un'interpretazione da verificare con Listing e stato in esecuzione.

Qui il debugger si distingue anche da un terminale GDB autonomo. GDB può controllare l'esecuzione, mentre Ghidra mantiene il trace dinamico accanto a simboli, blocchi di memoria, riferimenti e contesto del decompiler. Se la mappatura è errata, controlla base del modulo, architettura, rilocazione e programma importato invece di forzare una corrispondenza fuorviante.

  1. 1

    Trova l'indirizzo dinamico

    Usa il program counter o la posizione di un breakpoint per identificare modulo e indirizzo correnti nel trace.

  2. 2

    Trova la corrispondenza statica

    Apri la posizione corrispondente in CodeBrowser e conferma byte, confini della funzione e mappatura del modulo.

  3. 3

    Spiega il comportamento

    Confronta Listing, Decompiler, registri, memoria e call stack. Registra ciò che è osservato separatamente da ciò che è dedotto.

RISOLUZIONE DEI PROBLEMI

Problemi comuni del Ghidra Debugger e prossimi passi

La maggior parte dei problemi della prima sessione deriva da configurazioni non corrispondenti, non dall'assenza di una funzione del Debugger. Cambia una cosa alla volta e conserva l'output della console. Per verificare la toolchain, un campione piccolo e pulito è più utile di un target complesso.

Non considerare una connessione riuscita come prova che la sessione sia pronta. Conferma un thread popolato, un program counter, la mappa dei moduli e almeno un pannello di stato leggibile. Se il target è stripped o ottimizzato, prevedi più lavoro su simboli e mappatura degli indirizzi.

SintomoCausa probabileProssimo passo
Comando GDB non trovatoGDB non è installato o non è nel PATHUsa un percorso assoluto e verifica gdb --version
Istruzioni inutilizzabiliArchitettura o endianness erratiRicontrolla il formato e reimporta
Il breakpoint resta pendingModulo o indirizzo non sono mappatiAvanza, controlla Modules e imposta di nuovo lo stop
Registri vuotiIl target si è fermato prima di catturare lo statoSeleziona il thread fermo e aggiorna la vista del trace
I simboli non corrispondonoFile stripped o file di debug erratiCarica simboli corrispondenti e verifica la base del modulo
Attach negatoPermessi del sistema operativo o isolamentoUsa un processo di laboratorio autorizzato e modifica la policy con attenzione
PROSSIMI PASSI

Cosa imparare dopo la prima sessione di debug

Ripeti lo stesso ciclo di avvio e stop su due o tre programmi piccoli e autorizzati prima di provare un target remoto o un campione complesso multithread. Esercitati a spiegare un branch dall'input al breakpoint, al cambiamento di registro o memoria e infine alla funzione statica corrispondente. Questa traccia di prove vale più di molte schermate o di step eseguiti senza una domanda.

Usa il tutorial Ghidra per principianti per creare il progetto, eseguire Auto Analysis, seguire i riferimenti e leggere Function Graph. Consulta la guida al Decompiler quando il pseudocodice ha bisogno di nomi e tipi migliori e torna alla guida all'installazione se il problema reale riguarda JDK o launcher. Il corso ufficiale del Debugger resta la fonte migliore per i dettagli specifici del target agent.

DOMANDE FREQUENTI

Domande frequenti sul Ghidra Debugger

Ghidra ha un debugger?

Sì. Ghidra include un framework Debugger per avviare o collegarsi a un target, registrare trace, ispezionare lo stato, impostare breakpoint ed eseguire il programma passo passo. Completa, invece di sostituire, CodeBrowser e Decompiler statici.

Come collego Ghidra Debugger a un processo?

Avvia lo strumento Debugger, scegli un workflow di attach o un target agent supportato, seleziona il processo autorizzato e verifica architettura e stato iniziale. Prima dello step, assicurati che thread, program counter, moduli e registri siano popolati.

Serve GDB per usare Ghidra Debugger?

Il requisito esatto dipende dal target agent e dal workflow. Il percorso per principianti di questa guida usa GDB perché è un'interfaccia comune per target locali e remoti. Altri agent supportati possono avere prerequisiti e campi di configurazione diversi.

Il Ghidra Debugger è uguale al Decompiler?

No. Il Decompiler interpreta staticamente i byte del programma importato. Il Debugger osserva uno stato di esecuzione reale, come istruzione corrente, registri, memoria, thread e stack. Mappare il trace al programma statico permette di usare entrambi insieme.

Quale versione di Ghidra è stata verificata per questa guida?

L'endpoint ufficiale dell'ultima release, verificato il 6 agosto 2026, ha restituito Ghidra 12.1.2, pubblicato il 5 giugno 2026. In quella verifica il sito non ha trovato una release ufficiale più recente; controlla di nuovo la pagina ufficiale prima di affidarti a un comportamento specifico della versione.