
Server MCP che collega il reverse engineering di Ghidra con strumenti AI: 256 strumenti per decompilazione, emulazione P-code, debugging live, analisi del flusso di dati, operazioni batch e applicazione delle convenzioni in modalità headless e GUI.
Se trovi utile questo progetto, metti ⭐ una stella al repository — aiuta altri a scoprirlo!
Se Ghidra MCP ti fa risparmiare tempo, considera di sponsorizzare il progetto. Il supporto una tantum e ricorrente aiuta a finanziare aggiornamenti di compatibilità, rafforzamento della produzione, documentazione e nuovi strumenti.
Un server Model Context Protocol (MCP) pronto per la produzione che collega le potenti capacità di reverse engineering di Ghidra con gli strumenti AI moderni e i framework di automazione. 271 strumenti MCP, workflow AI testati sul campo e la più completa integrazione Ghidra-MCP disponibile — ora con emulazione P-code, integrazione del debugger live e analisi del flusso di dati con PCode-graph.
La maggior parte delle implementazioni Ghidra MCP offre una manciata di strumenti di sola lettura e basta. Questo progetto è diverso — è stato costruito da un reverse engineer che lo usa quotidianamente su binari reali, non come demo.
Ti è mai capitato: sei mesi in un progetto e trovi ProcessItem, process_items, handleItem e ItemProc nella stessa codebase — quattro funzioni che fanno la stessa cosa, nominate da quattro sessioni o ingegneri diversi senza un contratto condiviso. Risolvere il problema richiede più tempo del dovuto, e il problema si ripresenterà.
v5.0 sposta le convenzioni da "cose da ricordare" nel layer degli strumenti, dove possono essere effettivamente applicate.
Per gli agenti AI, questo significa output coerente in ogni sessione, ogni modello, ogni esecuzione — senza dover incollare una guida di stile in ogni prompt. Lo strumento conosce le regole; il modello deve solo prendere la decisione.
Per i team, elimina l'intera classe di commenti in revisione che dice "questa non è la nostra convenzione di denominazione." L'arbitraggio delle convenzioni rimane nello strumento, non nella revisione del codice.
Per il lavoro individuale su larga scala, analyze_function_completeness restituisce un punteggio 0–100% che misura onestamente: le deduzioni strutturali (artefatti del compilatore non correggibili) vengono perdonate nel tuo punteggio effettivo, la scala logaritmica impedisce a una singola categoria negativa di seppellire tutto il resto, e la qualità dei commenti a livelli ti dice esattamente cosa manca e perché.
Nota sulla compatibilità: I nomi degli strumenti MCP sono normalizzati per GitHub Copilot CLI e la validazione CAPI. I nomi degli strumenti esposti usano solo lettere minuscole, cifre, underscore e trattini; i percorsi HTTP annidati come
/debugger/statusvengono pubblicizzati come nomi comedebugger_status_2quando necessario per evitare collisioni con gli strumenti bridge statici.
EmulatorHelper di Ghidra; risolvi brute-force hash API in millisecondiUtenti di Ghidra Server condiviso: i client Ghidra 12.1.2 richiedono un Ghidra Server alla versione 12.1, 12.0.5 o una versione più recente compatibile. Aggiorna il server prima di usare questo plugin da un client 12.1.
Ghidra 12.1.2 include Jython come estensione opzionale. Gli script Java funzionano per impostazione predefinita, ma gli script
.pyinghidra_scripts/richiedono l'installazione dell'estensione Jython da File > Install Extensions e il riavvio di Ghidra.
Consigliato per tutte le piattaforme: usa direttamente
python -m tools.setup.
ensure-prereqsinstalla i requisiti Python runtime più i JAR Ghidra necessari nel repository Maven locale.deploycopia l'output della build, installa l'estensione nel profilo utente e corregge la configurazione utente di Ghidra.
deploy salva/chiude un'istanza di Ghidra corrispondente già in esecuzione quando
necessario, installa l'estensione, avvia Ghidra, attende lo stato MCP, ed esegue
i controlli di fumo dello schema.
Percorso di build supportato: python -m tools.setup build utilizza Maven internamente ed è il flusso di lavoro canonico utilizzato dai compiti e dalla documentazione del repository. ```bash
mvn clean package assembly:single -DskipTests
</div> ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
Nota per Debian/Kali/Ubuntu 23.04+ (PEP 668): queste distribuzioni contrassegnano il Python di sistema come gestito esternamente, quindi un semplice
pip installfallisce conerror: externally-managed-environment. Non aggirarlo con--break-system-packages— potrebbe danneggiare strumenti gestiti da apt. Usa invece uv (consigliato — crea e gestisce automaticamente un.venvlocale al progetto, ed è ciò che usano i comandi di questo repository):curl -LsSf https://astral.sh/uv/install.sh | sh uv run bridge-mcp-ghidra # risolve le dipendenze in .venv e avvia il bridgeoppure un ambiente virtuale classico:
python3 -m venv .venv && source .venv/bin/activate pip install -e . bridge-mcp-ghidra
This will:
~/.m2/repositoryGhidraMCP-<version>.zip with Maven~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/preferences with LastExtensionImportDirectoryPercorsi Linux: L'estensione è installata in
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. I file di configurazione di Ghidra si trovano in$HOME/.config/ghidra/ghidra_<version>_PUBLIC/.
L'estensione è installata in ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
Nota:
--ghidra-versionè richiesto quando si utilizza il percorso Homebrew perché il percorso non contiene alcuna stringa di versione.
Nella finestra principale del progetto: Tools > GhidraMCP > Start MCP Server
~/.cursor/mcp.json): ```json
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
@Pandoriaantje mantiene i pacchetti AUR della comunità:
ghidra-mcp-git — segue mainghidra-mcp — segue le release taggateInstalla con il tuo helper AUR preferito, ad esempio:```bash yay -S ghidra-mcp # or ghidra-mcp-git
### Utilizzo di base
#### Opzione 1: Trasporto Stdio (Consigliato per strumenti AI)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
Per aggiungere il bridge a Autohand Code da un checkout clonato:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Aggiungi `--scope project` prima di `ghidra` per salvare il server nella configurazione `.autohand` del progetto corrente invece della configurazione utente.
#### Opzione 2: Trasporto HTTP Streamable (Consigliato per client web/HTTP)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
Configurazione client MCP per il trasporto HTTP (aggiungi al file di configurazione MCP del tuo client):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
Client basati su browser (es. [MCP Inspector](https://github.com/modelcontextprotocol/inspector))
funzionano immediatamente: i trasporti HTTP rispondono alle richieste CORS preflight (`OPTIONS`) ed espongono
le intestazioni `mcp-session-id` / `mcp-protocol-version` agli script. Le origini consentite seguono la
politica dell'header Host — il loopback su qualsiasi porta è sempre permesso, insieme all'host di bind e a
qualsiasi host elencato in `GHIDRA_MCP_ALLOWED_HOSTS`.
#### Opzione 3: SSE Transport (Deprecato — usare streamable-http invece)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
Imposta GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1 per fare in modo che il bridge rifiuti qualsiasi chiamata con ambito programma che ometta un selettore di programma, restituendo un errore chiaro invece di lasciare che la chiamata sfrutti il "programma corrente" condiviso del server (quello su cui operano switch_program e la scheda GUI attiva).```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
Senza questo, una chiamata che omette `program=` viene eseguita contro il programma corrente, il che va bene per un flusso di lavoro a programma singolo ma diventa pericoloso una volta che più programmi sono aperti: la chiamata può leggere o modificare il binario sbagliato senza alcun errore. Il pericolo è maggiore quando più client condividono un server, poiché ciascuno sposta il globale del programma corrente da sotto gli altri.
Con la modalità rigorosa attivata, ogni chiamata con ambito programma deve nominare il proprio target. Questo copre ogni selettore che sceglie un programma aperto: il semplice `program=` e gli strumenti cross-program `source_program`/`target_program` o `program_a`/`program_b` (dichiarati obbligatori, ma il server ricade ancora sul programma corrente quando uno arriva vuoto). Un selettore dimenticato si manifesta come un errore evidente sulla prima chiamata errata, invece di una scrittura silenziosa sul binario sbagliato. Gli strumenti senza selettore di programma (`open_program` e `close_program` prendono `path`/`name`) non sono interessati. Disattivato per impostazione predefinita: con la variabile non impostata, il bridge invia le chiamate invariate.
#### Ridurre il sovraccarico del contesto degli strumenti
Il bridge espone un ampio catalogo. Per mantenere piccola la superficie degli strumenti del modello, esegui con `--lazy` (carica solo `listing,function,program` alla connessione) e lascia che il modello **scopra** il resto su richiesta invece di registrare tutto:
- `search_tools("rename function")` — cerca per parola chiave l'**intero** catalogo, inclusi gli strumenti il cui gruppo non è caricato. Ogni risultato indica se è richiamabile ora e, in caso contrario, l'esatta chiamata `load_tool_group(...)` per abilitarlo.
- `list_tool_groups()` — elenca tutte le categorie e il loro stato di caricamento.
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — carica o rimuove una categoria a runtime.
- `check_tools("rename_or_label,batch_set_comments")` — conferma che strumenti specifici siano richiamabili in questo momento.
`search_tools` funziona sia in modalità eager che `--lazy`, quindi gli agenti che onorano `tools/list_changed` ottengono la scoperta completa senza il costo del contesto iniziale.
#### Opzionale: Avvia il server debugger standalone```bash
uv sync --group debugger
uv run python -m debugger
Il server di debug ascolta su http://127.0.0.1:8099/ di default ed è
richiesto per gli strumenti proxy debugger_* esposti dal ponte MCP.
Flag del server di debug:
Imposta GHIDRA_DEBUGGER_URL in .env se modifichi la porta o l'host predefinito in modo che il ponte possa trovarlo.
http://127.0.0.1:8089/ di defaultcurl http://127.0.0.1:8089/check_connection
curl http://127.0.0.1:8089/get_version
## Supporta Questo Progetto
Se Ghidra MCP ti fa risparmiare tempo in ingegneria o reverse-engineering, considera di [sponsorizzare il progetto](https://github.com/sponsors/bethington).
- La sponsorizzazione una tantum aiuta a finanziare correzioni, aggiornamenti di compatibilità e attività di rilascio.
- La sponsorizzazione ricorrente aiuta a mantenere aggiornamenti, documentazione e rafforzamento della produzione.
- Il supporto aziendale aiuta a dare priorità all'affidabilità a lungo termine per il bridge, il server headless, l'integrazione del debugger e gli strumenti di workflow.
## 🔒 Sicurezza
GhidraMCP è progettato per lo sviluppo **solo su localhost**. La configurazione predefinita — server HTTP associato a `127.0.0.1`, senza autenticazione — è sicura su una workstation fidata a singolo utente e corrisponde al comportamento pre-v5.4.1.
**Se esponi il server oltre il loopback, configura prima queste tre variabili d'ambiente.** Il server rifiuta di avviarsi su un bind non loopback senza un token.
| Variabile d'ambiente | Effetto |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | Quando impostata, ogni richiesta HTTP deve portare `Authorization: Bearer <token>`. Confronto a prova di timing. `/mcp/health`, `/health`, `/check_connection` sono esenti. |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | Impostare a `1`, `true` o `yes` per abilitare `/run_script_inline` e `/run_ghidra_script`. **Disattivata per impostazione predefinita a partire da v5.4.1** — questi endpoint eseguono Java arbitrario contro il processo Ghidra. In modalità headless questo attiva anche l'inizializzazione di `BundleHost` OSGi all'avvio del server (framework Felix, ~centinaia di ms); lasciala disattivata se non hai bisogno di esecuzione di script. |
| `GHIDRA_MCP_FILE_ROOT` | Quando impostata a un percorso di directory, gli endpoint del percorso del filesystem (`/load_program`, `/import_file`, `/open_project`, `/delete_file`, ecc.) canonicalizzano l'input e richiedono che cada sotto questa radice. Previene il path-traversal. |
L'applicazione della qualità dei nomi è separata dalla sicurezza. Per impostazione predefinita, `rename_function_by_address` e gli endpoint di scrittura globale rifiutano nomi che non superano i controlli di qualità integrati, e le scritture di campi struct applicano la convenzione integrata del prefisso del campo. Disabilita il livello di convenzione integrato con **Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement**. La stessa casella di controllo delle Opzioni dello strumento copre `rename_data`, `rename_global_variable`, `set_global`, la protezione del prefisso/tipo di `apply_data_type`, e le correzioni automatiche del prefisso ungherese per i campi struct in `create_struct`, `add_struct_field` e `modify_struct_field`. L'impostazione viene letta all'avvio o al riavvio del server MCP. Gli avvisi di convenzione per funzioni/globali vengono comunque restituiti quando l'applicazione è disabilitata.
### Esempio: esposizione a una LAN privata con autenticazione```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
Quando ci si connette a un server Ghidra condiviso, GhidraMCP può sopprimere automaticamente la finestra di dialogo per la password. Risolve le credenziali in questo ordine (vince il primo valore non vuoto):
Nota sulla compatibilità: i client Ghidra 12.1.2 richiedono Ghidra Server 12.1.2, 12.0.5 o un server compatibile più recente. I server condivisi meno recenti non sono sicuri per un aggiornamento del client 12.1.
GHIDRA_SERVER_PASSWORD (o file .env nella directory di installazione di Ghidra o ~)~/.ghidra-cred — file password su una singola riga nella tua home directory<ghidra-install-dir>/.ghidra-credIl nome utente viene risolto in modo simile: variabile d'ambiente GHIDRA_SERVER_USER → proprietà di sistema user.name.
Se non viene trovata alcuna password, Ghidra mostra la sua normale richiesta GUI. Imposta queste variabili in .env (vedi .env.template per il blocco completo) per abilitare l'autenticazione silenziosa.
/run_script_inline o /run_ghidra_script, esporta GHIDRA_MCP_ALLOW_SCRIPTS=1. Si tratta di un cambiamento deliberato che rompe la compatibilità; l'impostazione predefinita precedente non era sicura.Causa: Plugin non abilitato o installato in modo errato.
Soluzione:
Causa: Server non avviato o porta errata.
Soluzione:
pip install fallisce con error: externally-managed-environmentCausa: PEP 668. Le distribuzioni della famiglia Debian (Debian 12+, Kali, Ubuntu 23.04+) contrassegnano il Python di sistema come gestito esternamente, quindi pip install globale è bloccato per proteggere i pacchetti gestiti da apt.
Soluzione: Usa un ambiente virtuale — mai --break-system-packages. Il percorso consigliato è uv, che gestisce automaticamente un .venv locale al progetto:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
O un classico venv:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger fallisce con ModuleNotFoundError per pybag o comtypesCausa: Il server del debugger standalone utilizza dipendenze Python opzionali solo per Windows che non sono installate per impostazione predefinita.
Soluzione:```text uv sync --group debugger uv run python -m debugger
Se hai sia un Python globale che un venv di progetto, assicurati di installare
ed eseguire dallo stesso interprete.
### 500 Errori Interni del Server
**Causa:** Eccezione lato server, spesso dovuta a dati mancanti del programma.
**Soluzione:**
1. Assicurati che un binario sia caricato in CodeBrowser
2. Esegui prima l'analisi automatica: **Analysis > Auto Analyze**
3. Controlla la console di Ghidra (**Window > Console**) per eccezioni Java
4. Alcune operazioni richiedono binari completamente analizzati
### 404 Errori Non Trovato
**Causa:** Endpoint inesistente o URL errato.
**Soluzione:**
1. Verifica che l'endpoint esista: `curl http://127.0.0.1:8089/get_version`
2. Controlla eventuali errori di digitazione nel nome dell'endpoint
3. Assicurati di usare il metodo HTTP corretto (GET vs POST)
### Gli script Python di Ghidra falliscono con "No script provider found"
**Causa:** In Ghidra 12.1.2, il supporto Jython non è più abilitato per impostazione predefinita. Gli script `.py` necessitano dell'estensione Jython inclusa; gli script Python 3 dovrebbero usare PyGhidra invece di Ghidra Script Manager.
**Soluzione:**
1. Nel Front End di Ghidra, apri **File > Install Extensions**.
2. Spunta **Jython**, riavvia Ghidra, quindi aggiorna Script Manager.
3. Per nuove automazioni, preferisci script Java di Ghidra o PyGhidra.
### Estensione non visualizzata in Install Extensions
**Causa:** File JAR in posizione errata.
**Soluzione:**
1. Posizione di installazione manuale: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. Oppure usa: **File > Install Extensions > Add** e seleziona il file ZIP
3. Assicurati che JAR/ZIP sia stato compilato per la tua versione di Ghidra
### La build fallisce con "Ghidra dependencies not found"
**Causa:** JAR di Ghidra non installati nel repository Maven locale.
**Soluzione:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
271 strumenti MCP supportati da endpoint HTTP, raggruppati per categoria di catalogo. Generato da tests/endpoints.json da python -m tools.gen_readme_api_reference --write; lo schema live su /mcp/schema è autorevole in fase di esecuzione. Modelli di utilizzo: docs/prompts/TOOL_USAGE_GUIDE.md.
analysis_status - Ottiene lo stato dell'analisi automatica per i programmi aperticlose_program - Chiude un programma aperto tramite percorso del progetto o nomecreate_property_map - Crea una mappa di proprietà utente per memorizzare valori tipizzati con chiave per indirizzodelete_property_map - Elimina una mappa di proprietà utente e tutti i valori che contieneexit_ghidra - Salva ed esce da Ghidraget_address_spaces - Elenca tutti gli spazi di indirizzi fisici e overlay nel programma (gli overlay includono il flag is_overlay e il nome overlayed_space)get_current_program_info - Ottiene le informazioni sul programma correnteget_language_metadata - Scarica la descrizione del linguaggio del programma: spazi di indirizzi, registri, simboli predefiniti, endianness, dimensione del puntatore (issue #192)get_program_options - Legge tutte le opzioni in un gruppo di opzioni del programma con tipi, valori correnti, valori predefiniti e descrizioniget_property - Legge il valore memorizzato a un indirizzo in una mappa di proprietàcreate_folder - Crea una cartella nel progettodelete_file - Elimina un file dal progettodelete_project - Elimina un progetto Ghidralist_projects - Elenca i progetti Ghidra disponibilimove_file - Sposta un file in un'altra cartella del progettomove_folder - Sposta una cartella in un'altra posizioneproject_info - Ottiene informazioni dettagliate sul progetto inclusi strumenti in esecuzione e programmi apertiDisponibile sul server headless autonomo (GhidraMCPHeadlessServer).
archive_project - Archivia il progetto attualmente aperto in un file .gar nativo di Ghidracheckin_program - Verifica il rientro di un programma aperto nel server Ghidra condiviso come nuova versioneclose_project - Chiude il progetto attualmente apertocreate_project - Crea un nuovo progetto Ghidraexport_program - Esporta un programma aperto o residente nel progetto in un file ZIP Ghidra (.gzf)get_project_info - Ottiene informazioni sul progetto attualmente apertoimport_program - Importa un file ZIP Ghidra (.gzf) nel progetto attualmente aperto come nuovo DomainFile in target_folder (predefinito '/')load_program - Carica un file binario nel server headless per l'analisiload_program_from_project - Carica un programma dal progetto Ghidra (headless)open_project - Apre un progetto Ghidra esistente (file .gpr o directory)restore_project - Ripristina un archivio .gar Ghidra in un nuovo progetto su disco in list_bookmarks - Elenca i segnalibrilist_calling_conventions - Elenca le convenzioni di chiamata disponibililist_classes - Elenca i nomi di namespace/classilist_data_items - Elenca i dati definitilist_data_items_by_xrefs - Elenca i dati ordinati per numero di riferimenti incrociatilist_exports - Elenca i simboli esportatilist_external_locations - Elenca le posizioni esternelist_functions - Elenca le funzioni con indirizzilist_functions_enhanced - Elenca le funzioni con metadatilist_globals - Elenca le variabili globalilist_imports - Elenca i simboli importatilist_methods - Elenca tutti i nomi di funzione con paginazioneget_current_address - Ottiene l'indirizzo del cursore (solo GUI)get_current_function - Ottiene la funzione al cursore (solo GUI)get_current_selection - Ottiene gli intervalli di indirizzi evidenziati nell'elenco di CodeBrowser (solo GUI)get_entry_points - Ottiene i punti di ingresso del programmaget_enum_values - Ottiene i valori di enumerazioneget_external_location - Ottiene i dettagli di una posizione esternaget_full_call_graph - Ottiene il grafo delle chiamate completoget_function_by_address - Ottiene la funzione a un indirizzoget_function_call_graph - Ottiene il grafo delle chiamateget_function_callees - Ottiene le funzioni chiamateget_function_callers - Ottiene le funzioni chiamantifind_similar_functions - Trova funzioni similisearch_byte_patterns - Cerca pattern di bytesearch_data_types - Cerca tipi di datisearch_functions - Cerca funzioni per nomesearch_functions_enhanced - Ricerca avanzata di funzionisearch_strings - Cerca stringhe definite tramite un pattern regex/sottostringadecompile_function - Decompila una funzionedisassemble_bytes - Disassembla un intervallo di bytedisassemble_function - Disassembla una funzioneforce_decompile - Forza una nuova decompilazioneadd_function_tag - Associa uno o più tag a una funzionebatch_add_function_tags - Associa tag a molte funzioni in una singola transazionebatch_remove_function_tags - Rimuove tag da molte funzioni in una singola transazioneclear_flow_and_repair - Esegue l'azione GUI 'Clear Flow and Repair' di Ghidra su un intervallo seed: cancella il flusso di istruzioni raggiungibile dal seed, quindi ripara i corpi delle funzioni e ri-disassembla il flusso mantenuto (ClearFlowAndRepairCmd con clear_data=false, clear_labels=false, repair=true)create_function_tag - Crea una definizione di tag funzione a livello di programma con un commento opzionaledelete_function_tag - Elimina una definizione di tag funzione a livello di programmaget_function_tags - Elenca tutti i tag assegnati a una funzione specificalist_class_members - Elenca le funzioni membro di una classe C++list_function_tags - Elenca tutte le definizioni di tag funzione a livello di programma con i loro conteggi di utilizzoremove_function_tag - Rimuove uno o più tag da una funzioneadd_memory_reference - Crea un riferimento incrociato definito dall'utente tra due indirizzi di memoria che l'analizzatore automatico non può dedurre (tabelle di puntatori popolate a runtime, vtable, puntatori a funzione vincolati tardivamente, tabelle di salto/caso mancate)get_bulk_xrefs - Ottiene riferimenti incrociati per più indirizziget_function_xrefs - Ottiene i riferimenti incrociati di una funzioneget_xrefs_from - Ottiene i riferimenti da un indirizzoget_xrefs_to - Ottiene i riferimenti a un indirizzoremove_reference - Rimuove uno o più riferimenti incrociati di memoria da un indirizzo a un altro — l'inverso di add_memory_referenceadd_struct_field - Aggiunge un campo a una strutturaanalyze_global_completeness - Valuta la completezza della documentazione di una variabile globale su una scala 0-100 con budget — l'analogo per indirizzo dati di analyze_function_completenessapply_data_type - Applica un tipo di datoaudit_global - Verifica lo stato della documentazione di una variabile globaleaudit_globals_in_function - Verifica ogni variabile globale referenziata all'interno di una funzione in una singola chiamatabatch_set_variable_types - Imposta più tipi di variabiliclone_data_type - Clona un tipo di datocreate_array_type - Crea un tipo arraycreate_data_type_category - Crea una categoria di tipi di daticreate_enum - Crea un'enumerazionecreate_function_signature - Crea un tipo firma di funzionebatch_create_labels - Crea più etichettebatch_delete_labels - Elimina più etichettebatch_rename_function_components - Rinomina in batch i componenti di una funzionecreate_label - Crea un'etichettadelete_label - Elimina un'etichetta a un indirizzorename_data - Rinomina un simbolo di datorename_external_location - Rinomina una posizione esternarename_function - Rinomina una funzione per nomerename_function_by_address - Rinomina una funzione per indirizzorename_global_variable - Rinomina una variabile globalerename_label - Rinomina un'etichettarename_or_label - Rinomina o crea un'etichettabatch_set_comments - Imposta più commenticlear_function_comments - Cancella tutti i commenti di una funzionedelete_bookmark - Elimina un segnalibroget_comment - Ottiene i commenti dell'elenco (piastra/pre/eol/post/ripetibili) a QUALSIASI indirizzo, inclusi gli indirizzi di dati (a differenza di get_plate_comment che richiede una funzione)get_plate_comment - Ottiene il commento a piastraset_bookmark - Imposta un segnalibroset_comment - Imposta un commento dell'elenco di un tipo specificato (piastra/pre/eol/post/ripetibile) a QUALSIASI indirizzo, inclusi gli indirizzi di datiset_decompiler_comment - Imposta PRE_COMMENTset_disassembly_comment - Imposta EOL_COMMENTset_plate_comment - Imposta il commento a piastraanalyze_api_call_chains - Analizza le catene di chiamate APIanalyze_call_graph - Analizza i pattern del grafo delle chiamate di funzioneanalyze_control_flow - Analizza il flusso di controlloanalyze_data_region - Analizza una regione di datianalyze_dataflow - Traccia la propagazione dei valori attraverso una funzione (grafo PCode, avanti/indietro)analyze_for_documentation - Analisi composita della documentazione RE (decompila + classifica + variabili + completezza)analyze_function_complete - Analisi completa di una funzione in una singola chiamataanalyze_function_completeness - Analizza la completezza della documentazioneanalyze_struct_field_usage - Analizza l'utilizzo dei campi di strutturaapply_data_classification - Applica la classificazione dei datibatch_analyze_completeness - Analizza in batch la completezza per più funzioniarchive_ingest_function - Inserisce la documentazione di una singola funzione nell'archivio cross-version (re_kb.functions su bsim Postgres)archive_ingest_program - Inserisce in blocco ogni funzione in un programma nell'archivio di documentazione cross-versionbatch_string_anchor_report - Report delle stringhe del file sorgente e delle loro funzioni FUN_*bulk_fuzzy_match - Corrispondenza fuzzy bulk cross-binary di funzionifind_similar_functions_fuzzy - Corrispondenza fuzzy cross-binary di funzionimerge_program_documentation - Unione bulk: copia tutta la documentazione RE (nomi di funzione, firme, commenti a piastra, commenti di istruzione a EOL/PRE/POST, etichette non predefinite e simboli globali) da un programma a un altro agli stessi indirizziapply_function_documentation - Applica la documentazione di una funzionecheck_connection - Endpoint di controllo salutecompare_programs_documentation - Confronta la documentazione tra programmiconvert_number - Converte un numero tra basidiff_functions - Confronta due funzionifind_undocumented_by_string - Trova funzioni non documentate che fanno riferimento a una stringaget_bulk_function_hashes - Ottiene hash di funzioni in bloccoget_function_documentation - Esporta la documentazione di una funzioneget_function_hash - Ottiene l'hash di una funzioneget_function_signature - Ottiene la firma caratteristica di una funzioneget_metadata - Ottiene i metadati del programmaemulate_function - Emula una singola funzione con input di registro/memoria controllatiemulate_hash_batch - Risoluzione brute-force di hash APIrun_ghidra_script - Esegue uno script con cattura dell'outputrun_script_inline - Esegue codice script inlineserver_admin_set_permissions - Imposta i permessi utente su un repositoryserver_admin_terminate_all_checkouts - Termina tutti i check-in in una cartella in modo ricorsivoserver_admin_terminate_checkout - Termina tutti i check-in su un singolo fileserver_admin_users - Elenca tutti gli utenti sul serverserver_authenticate - Registra le credenziali del server per l'autenticazione programmaticaserver_checkouts - Elenca tutti i file in check-out in una cartella, inclusi i check-in lato serverserver_connect - Si connette a un server Ghidraserver_disconnect - Si disconnette dal server Ghidraserver_repositories - Elenca i repository sul server connessoserver_repository_create - Crea un nuovo repository sul serverserver_repository_file - Ottiene informazioni su un file da un repository del serverSu host Windows dove il proxy del debugger WinDbg del bridge è attivo (GHIDRA_DEBUGGER_URL), i nomi in conflitto ricevono un suffisso _2 (es. debugger_status_2).
debugger_dynamic_to_static - Traduce un indirizzo dinamico a runtime dalla traccia corrente in un indirizzo statico del programma Ghidradebugger_interrupt - Interrompe (entra in) il target in esecuzionedebugger_launch - Lancia un eseguibile tramite il launcher del debugger Trace RMI di Ghidradebugger_launch_offers - Elenca le opzioni disponibili per lanciare/collegare il debugger per il programma correntedebugger_list_breakpoints - Elenca tutti i punti di interruzione nella traccia correntedebugger_modules - Elenca i moduli (DLL/EXE) caricati nel processo sottoposto a debugdebugger_read_memory - Legge la memoria dal processo sottoposto a debugdebugger_registers - Legge i registri della CPU dall'istantanea corrente della traccia di debugdebugger_remove_breakpoint - Rimuove un punto di interruzione a un indirizzodebugger_resume - Riprende l'esecuzione del processo sottoposto a debugprompt_policy - Abilita, disabilita o interroga temporaneamente la gestione dei prompt di automazione con ambitodebugger_* quando GHIDRA_DEBUGGER_URL punta al server debugger standalone.check_tools - Segnala quali strumenti sono attualmente registrati e richiamabiliconnect_instance - Collega il ponte a una specifica istanza di Ghidraimport_file - Importa un binario dal disco nel progetto corrente e lo aprelist_instances - Scopre le istanze Ghidra MCP in esecuzione (UDS + scansione porta TCP)list_tool_groups - Elenca i gruppi di strumenti e il loro stato di caricamentoload_tool_group - Registra gli strumenti dinamici di un gruppo di strumenti con il client MCPsearch_tools - Cerca nell'intero catalogo degli strumenti per parola chiaveunload_tool_group - Annulla la registrazione degli strumenti dinamici di un gruppo di strumentiVedi CHANGELOG.md per la cronologia delle versioni.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### Componenti
- **python/bridge_mcp_ghidra/** — Pacchetto server MCP Python (distribuito come wheel `ghidra-mcp-bridge`; script console `bridge-mcp-ghidra`) che traduce il protocollo MCP in chiamate HTTP (225 voci di catalogo)
- **GhidraMCP.jar** — Plugin Ghidra che espone le capacità di analisi tramite HTTP (175 endpoint GUI)
- **GhidraMCPHeadlessServer** — Server headless standalone — 183 endpoint, nessuna GUI richiesta
- **ghidra_scripts/** — Raccolta di script di automazione per attività comuni
## 🔧 Sviluppo
### Compilazione dal Sorgente```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
Il sistema di build autorevole oggi è Maven. tools.setup, le attività di VS Code e il flusso di deploy documentato compilano tutti tramite pom.xml e scrivono gli artefatti in target/. build.gradle rimane nel repo come fallback manuale per gli utenti diretti di Ghidra/Gradle, ma non è il percorso principale.
Flag comuni accettati dalla maggior parte dei comandi:
I livelli di test di deploy sono facoltativi perché i livelli benchmark possono importare/resettare
Benchmark.dll e BenchmarkDebug.exe nel progetto Ghidra attivo. Usa
--test release prima di rilasciare, o imposta
GHIDRA_MCP_DEPLOY_TESTS=release in un .env locale quando desideri che ogni deploy
sulla tua macchina esegua la regressione live del benchmark. Vedi
Test e Regressione dei Rilasci.```text
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup bump-version --new X.Y.Z --tag
python -m tools.setup run-tests
python -m tools.setup --help
### Struttura del Progetto```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
I JAR di Ghidra devono essere installati nel repository Maven locale (~/.m2/repository) prima della compilazione.
Questa è una configurazione una tantum per macchina, da ripetere quando la versione di Ghidra cambia.
-Deploy ora installa queste dipendenze automaticamente per impostazione predefinita.
Lo strumento impone la coerenza di versione tra:
pom.xml (ghidra.version)--ghidra-path (es. ghidra_12.1.2_PUBLIC)Se questi non corrispondono, il deployment fallisce immediatamente con un errore chiaro.
Se visualizzi un errore di mancata corrispondenza di versione, allinea entrambi i valori:
pom.xml → ghidra.version--ghidra-path (ghidra_X.Y.Z_PUBLIC)Quindi esegui di nuovo:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
The chunk doesn’t appear to have been fully provided, but I'll process what's there.```text
# Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
Librerie Richieste (14 JARs, ~37 MB):
Nota: le librerie NON sono incluse nel repository (vedi
.gitignore). È necessario installarle dalla propria installazione di Ghidra prima della compilazione.
Punto di ingresso per automazione:
python -m tools.setupè l'interfaccia supportata per setup/build/deploy/versioning- usa
ensure-prereqs,build,deploy,preflight,clean-allebump-versiondirettamente- questi comandi attualmente utilizzano Maven come backend di compilazione Java canonico
GhidraMCP include una modalità server headless per l'analisi automatizzata senza la GUI di Ghidra.
docker-compose up -d ghidra-mcp
curl http://localhost:8089/check_connection
### Workflow API senza testa```bash
# 1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
# 3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
# 4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
# 5. Get metadata
curl http://localhost:8089/get_metadata
Variabili d'ambiente per Docker:
GHIDRA_MCP_PORT - Porta del server (default: 8089)GHIDRA_MCP_BIND_ADDRESS - Indirizzo di bind (default: 0.0.0.0 in Docker)JAVA_OPTS - Opzioni JVM (default: -Xmx4g -XX:+UseG1GC)Vedi CONTRIBUTING.md per le linee guida dettagliate sui contributi.
git checkout -b feature/amazing-feature)mvn clean package assembly:single -DskipTests or GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Questo progetto è concesso in licenza sotto la Apache License 2.0 - consulta il file LICENSE per i dettagli.
Vedi CHANGELOG.md per la cronologia delle versioni e le note di rilascio.
Questo progetto deriva originariamente da LaurieWired/GhidraMCP nell'agosto 2025 ed è stato successivamente riscritto ed esteso in modo sostanziale. Riconosciamo il lavoro originale di LaurieWired come punto di partenza. Vedi NOTICE per l'attribuzione della licenza.
Questo progetto ha beneficiato del lavoro di collaboratori dedicati:
@heeen — Contributi significativi tra cui:
save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)@huehuehuehueing — Contributi significativi tra cui:
Supporto del prefisso dello spazio degli indirizzi — aggiunta della sintassi <spazio>:<hex> (es. mem:1000, code:ff00) al parsing degli indirizzi su tutta la superficie degli endpoint, sbloccando obiettivi multi-spazio come firmware embedded (#84, chiude #65)
Parametro program opzionale + correzioni schema required-param — ha reso program opzionale su ogni endpoint con un fallback sensato a currentProgram, e ha corretto diversi bug di schema required-vs-optional ereditati dal catalogo (#92)
Ha generato #44 (strumenti per tipi di dati/enum) — l'issue che ha motivato il layer di enforcement di enum e strutture v5.0
Team di Ghidra - Per l'incredibile piattaforma di reverse engineering
Model Context Protocol - Per il framework standardizzato di integrazione AI
Collaboratori - Per test, feedback e miglioramenti
Pronto per il deployment in produzione con affidabilità di livello enterprise e capacità complete di analisi binaria.
| Livello | Comportamento | Esempio |
|---|
| Correzione automatica | Applicato silenziosamente | Campo count su un uint32 → auto-prefissato dwCount al salvataggio |
| Avviso | La modifica viene effettuata, viene restituito un avviso | processData → "il nome dovrebbe essere PascalCase con un verbo: ProcessData" |
| Rifiuto | Modifica bloccata con spiegazione | Modifica undefined → undefined → "no-op rifiutata, tipo invariato" |
| Flag | Default | Description |
|---|
--transport | stdio | stdio (strumenti AI), streamable-http (client web), sse (deprecato) |
--mcp-host | 127.0.0.1 | Host di bind per trasporti HTTP |
--mcp-port | — | Porta per trasporti HTTP |
--lazy | disattivato | Carica solo i gruppi di strumenti predefiniti alla connessione. Avvio più rapido, ma i client MCP che non supportano tools/list_changed vedranno un elenco incompleto di strumenti. Non consigliato per Claude Code. |
--no-lazy | (predefinito) | Carica immediatamente tutti i gruppi di strumenti alla connessione. Richiesto per la maggior parte dei client AI. |
--default-groups | listing,function,program | Gruppi separati da virgola caricati alla connessione quando è impostato --lazy. |
| Flag | Default | Descrizione |
|---|
--port | 8099 | Porta del server HTTP |
--host | 127.0.0.1 | Indirizzo di bind (0.0.0.0 per esporre sulla LAN) |
--exports-dir | — | Percorso di una directory dll_exports/ per la risoluzione ordinale-in-nome |
--log-level | INFO | DEBUG, INFO, WARNING o ERROR |
import_file - Importa un file binario dal disco nel progetto Ghidra corrente e lo aprelist_open_programs - Elenca i programmi apertilist_option_groups - Elenca i gruppi di opzioni del programma (es.list_project_files - Elenca i file del progettolist_properties - Elenca le voci (indirizzo, valore) memorizzate in una mappa di proprietà, con paginazionelist_property_maps - Elenca le mappe di proprietà definite dall'utente — archivi valore→chiave per indirizzo tipizzatiopen_program - Apre un programma dal progettoreanalyze - Attiva l'analisi automatica completa su un programmaremove_program_option - Rimuove un'opzione da un gruppo di opzioni del programmaremove_property - Rimuove il valore memorizzato a un singolo indirizzo in una mappa di proprietàsave_all_programs - Salva tutti i programmi apertisave_program - Salva il programma correnteset_image_base - Imposta l'indirizzo base del programma (riposiziona tutti gli indirizzi)set_program_option - Imposta un'opzione del programma tipizzataset_property - Imposta un valore a un indirizzo in una mappa di proprietàswitch_program - Passa al programma correnteparent_dir/project_nameserver_status - Verifica lo stato della connessione al server headlesslist_namespaces - Elenca tutti i namespacelist_scripts - Elenca gli script Ghidra disponibililist_segments - Elenca i segmenti di memorialist_strings - Elenca le stringhe definiteget_function_count - Restituisce il numero di funzioni nel programma caricatoget_function_jump_targets - Ottiene le destinazioni dei saltiget_function_labels - Ottiene le etichette nella funzioneget_function_variables - Elenca tutte le variabili in una funzioneget_struct_layout - Ottiene il layout della strutturaget_valid_data_types - Ottiene i nomi dei tipi di dati validisearch_functions_by_tag - Elenca tutte le funzioni che hanno un tag specificato associatoset_decompiler_variable_type - Imposta il tipo di una variabile (di alto livello) o di un parametro del decompilatore per nomeset_function_no_return - Imposta l'attributo no-returnset_function_tag_comment - Aggiorna il commento/descrizione su una definizione di tag funzione esistente a livello di programmaset_function_this_type - Imposta il tipo del decompilatore/database del puntatore 'this' implicito (ECX su x86 __thiscall/__fastcall)set_variables - Imposta tipi e nomi per più variabili in modo atomicocreate_pointer_type - Crea un tipo puntatorecreate_struct - Crea una strutturacreate_typedef - Crea un typedefcreate_union - Crea un'unionedelete_data_type - Elimina un tipo di datoembed_struct_field - Sostituisce un campo di struttura con un tipo struct incorporato per valore (es.get_data_type_size - Ottiene la dimensione del tipo di dato in byteget_type_size - Ottiene la dimensione e le informazioni del tipo di datoimport_data_types - Importa tipi di dati da GDTlist_data_type_categories - Elenca le categorie di tipi di datilist_data_types - Elenca i tipi di datimodify_struct_field - Modifica un campo di strutturamodify_struct_field_type - Imposta il tipo di un campo di struttura per nome o offset (offset:N)move_data_type_to_category - Sposta un tipo di dato in una categoriarecreate_struct - Sostituisce una struttura in un passaggio: rimuove opzionalmente un tipo esistente con lo stesso nome, quindi crea con JSON dei campi (stessa forma di create_struct)remove_struct_field - Rimuove un campo di strutturaresize_struct - Ingrandisce o riduce una struttura esistente in base alla dimensione totale in byteresolve_duplicate_type - Trova tipi di dati duplicati per nome semplice; elimina stub /Demangler di dimensione-1 inutilizzati quando esiste un tipo canonico più grandeset_function_prototype - Imposta il prototipo di una funzione (tipo di ritorno, tipi dei parametri, convenzione di chiamata)set_global - Applica atomicamente nome + tipo + commento a piastra + lunghezza array a una variabile globaleset_local_variable_type - Imposta il tipo di una variabile localeset_parameter_type - Imposta il tipo di un parametroset_variable_storage - Imposta l'archiviazione di una variabilevalidate_data_type - Valida la sintassi di un tipo di datovalidate_data_type_exists - Verifica se un tipo di dato esistevalidate_function_prototype - Valida un prototipo di funzionerename_variable - Rinomina una variabile in una funzionerename_variables - Rinomina in batch le variabilibatch_apply_documentation - Applica tutta la documentazione a una funzione in una singola chiamatabatch_decompile - Decompila più funzioni contemporaneamentecan_rename_at_address - Verifica se l'indirizzo può essere rinominatoclear_instruction_flow_override - Cancella l'override del flussoconfigure_analyzer - Configura un plugin di analisicreate_function - Crea una funzione a un indirizzocreate_memory_block - Crea un blocco di memoriadelete_function - Elimina una funzione a un indirizzodetect_array_bounds - Rileva i limiti degli arraydetect_crypto_constants - Rileva costanti crittografichedetect_malware_behaviors - Rileva comportamenti malwareextract_iocs_with_context - Estrae IOCs con contestofind_anti_analysis_techniques - Trova tecniche di anti-analisifind_code_gaps - Trova gap di byte non definiti tra le funzioni nella memoria eseguibilefind_dead_code - Trova codice mortofind_next_undefined_function - Trova la successiva funzione non definitaget_assembly_context - Ottiene il contesto assemblyget_field_access_context - Ottiene il contesto di accesso ai campiget_function_pcode - Scarica il P-code grezzo per una funzione (issue #192)inspect_memory_content - Ispeziona i byte di memorialist_analyzers - Elenca i plugin di analisi disponibiliread_memory - Legge la memoria grezzarun_analysis - Esegue l'analisi automatica sul programma correntesearch_instructions - Cerca istruzioni per mnemonico e/o sottostringa degli operandisuggest_field_names - Suggerisce nomi di campoget_version - Ottiene la versione del pluginhealth - Endpoint di controllo salute per il server headlessmcp_health - Salute del server HTTP: statistiche del pool, uptime, memoria, conteggio richieste attivemcp_schema - Schema API leggibile dalla macchina con metadati degli endpointtool_goto_address - Naviga l'elenco di CodeBrowser e il decompilatore verso un indirizzo specificotool_launch_codebrowser - Apre un file in CodeBrowser, avviandone uno nuovo se necessariotool_running_tools - Elenca tutte le finestre degli strumenti Ghidra in esecuzioneserver_repository_files - Elenca i file in una cartella del repository del serverserver_version_control_add - Aggiunge un file al controllo versioneserver_version_control_checkin - Verifica il rientro di un file sotto controllo versioneserver_version_control_checkout - Verifica il checkout di un file sotto controllo versioneserver_version_control_undo_checkout - Annulla il checkout di un fileserver_version_history - Ottiene la cronologia delle versioni per un filedebugger_set_breakpoint - Imposta un punto di interruzione software a un indirizzo nella tracciadebugger_stack_trace - Ottiene il backtrace dello stack di chiamate per il thread correntedebugger_static_to_dynamic - Traduce un indirizzo statico del programma Ghidra in un indirizzo dinamico a runtime nella traccia correntedebugger_status - Ottiene lo stato del debugger: traccia attiva, thread, stato di esecuzione, conteggio modulidebugger_step_into - Esegue un singolo passo nell'istruzione successiva (segue le chiamate)debugger_step_out - Esce dalla funzione corrente (esegue fino al ritorno)debugger_step_over - Esegue un singolo passo sull'istruzione successiva (non segue le chiamate)debugger_traces - Elenca tutte le tracce di debug aperte| Comando | Cosa fa |
|---|
ensure-prereqs | Installa le dipendenze Python e i JAR Maven di Ghidra in un colpo solo. Inizia qui su una nuova macchina. |
preflight | Convalida Python, il tool di build, il percorso di Ghidra e la disponibilità dei JAR senza apportare modifiche. Aggiungi --strict per controllare anche la raggiungibilità della rete. |
build | Compila il JAR del plugin e lo ZIP dell'estensione tramite Maven (o Gradle quando TOOLS_SETUP_BACKEND=gradle). |
deploy | Copia l'estensione compilata nel profilo di Ghidra e applica una patch a FrontEndTool.xml per l'attivazione automatica. |
start-ghidra | Avvia l'installazione di Ghidra configurata. |
clean | Rimuove gli output di build di Maven/Gradle (target/, build/). |
clean-all | Rimuove gli output di build più gli artefatti della cache locale (JAR Ghidra in .m2, ecc.). |
install-ghidra-deps | Installa solo i JAR Ghidra in ~/.m2. Utile quando l'ambiente di build cambia. |
install-python-deps | Installa i gruppi di dipendenze Python tramite uv sync. |
run-tests | Esegue la suite di test Java offline (nessun Ghidra attivo necessario). |
verify-version | Verifica che le stringhe di versione siano coerenti tra pom.xml, CHANGELOG.md e README.md. |
bump-version --new X.Y.Z | Aggiorna atomicamente tutti i riferimenti di versione. Passa --tag per creare un tag git. |
| Flag | Descrizione |
|---|
--ghidra-path PATH | Directory di installazione di Ghidra. Predefinito a GHIDRA_PATH da .env. |
--dry-run | Stampa le azioni senza eseguirle. |
--force | Reinstalla i JAR Ghidra anche se già presenti (install-ghidra-deps, ensure-prereqs). |
--with-debugger | Forza l'installazione dei requisiti Python del debugger (solo Windows). |
--use-debugger-toggle | Legge INSTALL_DEBUGGER_DEPS da .env per decidere se installare le dipendenze del debugger. |
--test TIER | (solo deploy) Accetta livelli di regressione di deploy live come release o debugger-live. |
--strict | (solo preflight) Controlla anche la raggiungibilità della rete per Maven Central e PyPI. |
| Libreria | Percorso Sorgente | Scopo |
|---|
| Base.jar | Features/Base/lib/ | Funzionalità principali di Ghidra |
| Decompiler.jar | Features/Decompiler/lib/ | Motore di decompilazione |
| PDB.jar | Features/PDB/lib/ | Supporto simboli PDB Microsoft |
| FunctionID.jar | Features/FunctionID/lib/ | Identificazione delle funzioni |
| SoftwareModeling.jar | Framework/SoftwareModeling/lib/ | API del modello di programma |
| Project.jar | Framework/Project/lib/ | Gestione dei progetti |
| Docking.jar | Framework/Docking/lib/ | Framework di ancoraggio UI |
| Generic.jar | Framework/Generic/lib/ | Utilità generiche |
| Utility.jar | Framework/Utility/lib/ | Utilità principali |
| Gui.jar | Framework/Gui/lib/ | Componenti GUI |
| FileSystem.jar | Framework/FileSystem/lib/ | Supporto file system |
| Graph.jar | Framework/Graph/lib/ | Analisi grafico/grafo delle chiamate |
| DB.jar | Framework/DB/lib/ | Operazioni di database |
| Emulation.jar | Framework/Emulation/lib/ | Emulazione P-code |
| Endpoint | Metodo | Descrizione |
|---|
/load_program | POST | Carica file binario per analisi |
/run_analysis | POST | Esegue analisi automatica di Ghidra |
/list_functions | GET | Elenca tutte le funzioni scoperte |
/list_exports | GET | Elenca i simboli esportati |
/list_imports | GET | Elenca i simboli importati |
/decompile_function | GET | Decompila la funzione in codice C |
/create_function | POST | Crea funzione all'indirizzo |
/get_metadata | GET | Ottiene metadati del programma |
/create_project | POST | Crea un progetto Ghidra |
/list_analyzers | GET | Elenca gli analizzatori disponibili |
/server/status | GET | Verifica connessione al server Ghidra |
| Metrica | Valore |
|---|
| Versione | 5.17.0 |
| Strumenti MCP | 249 completamente implementati |
| Endpoint GUI | 196 (GhidraMCPPlugin) |
| Endpoint headless | 195 (GhidraMCPHeadlessServer) |
| Compilazione | ✅ 100% successo |
| Efficienza batch | 93% riduzione chiamate API |
| Flussi di lavoro AI | 7 flussi di lavoro documentati comprovati |
| Script Ghidra | Script di automazione inclusi |
| Documentazione | Completa con prompt AI |