Changed
- Breaking: fully-qualified symbol names. Functions, symbols, data labels, variables, and xrefs now use the fully-qualified name (namespace path, e.g.
FOM::SharedMemory::ReadUInt; global-namespace members are unprefixed) for lookup, filtering, and output.GET /functions/by-name/{fqn}takes a URL-encoded FQN; a bare name resolves in the global namespace only. Renaming a function, data label, or symbol to anA::B::namevalue moves it into that namespace (created if absent); a leading::orGlobal::moves it to the global namespace. The separatenamespacefield is removed from function and symbol responses (folded into the FQNname). Local variable names stay bare and reject::.API_VERSIONbumped to 3000. Reimplemented from PR #18 against the Javalin layer. (#18)
Added
analysislink on/program: the program resource now advertises ananalysislink (to/analysis/status) for HATEOAS discoverability.- Run Ghidra scripts via the API:
GET /scripts(list) andPOST /scripts/run(run an existing script byname, or compile and run ad-hoc GhidraScriptsource, withargs), plusscripts_list/scripts_runbridge tools andghydra scripts list/run. Captures the script's output. Lets an agent do multi-stage/batch work (mass rename, signature transfer) in one call. Arbitrary code execution, so it is disabled unless the server is started with-Dghydra.dev.allowScripts=true(orGHYDRA_ALLOW_SCRIPTS=1). (#3) - Scalar search: find constant values in instructions (
GET /scalars,scalars_searchbridge tool,ghydra scalars search), like Ghidra's "Search For Scalars". Filter by containing function (in_function) or by a nearby called function (to_function, e.g. the0passed tomemset). Thein_functionfilter scans only the matching functions; unfiltered scans on large programs are time-bounded and reportscanTruncated. Reimplemented from PR #17 against the Javalin layer. (#17) - Save endpoint:
POST /program/savepersists the current program to the project (?all=truesaves every open program with unsaved changes). - Dev-only shutdown endpoint:
POST /dev/shutdownquits Ghidra so the build/deploy/restart loop can be automated. Off by default; enable with-Dghydra.dev.allowShutdown=trueorGHYDRA_DEV_SHUTDOWN=1. With unsaved changes it refuses (409) unless?save=true(save, then exit) or?force=true(discard, then exit).
Fixed
- HATEOAS links: templated links with a single string argument (an address or name) emitted a literal
{}href with the value misplaced into amethodfield; they now substitute correctly across all endpoints. Action links use a newlinkWithMethod. - Disassembly truncation: the bridge text output now reports the total instruction count and the next offset when a function's disassembly is paginated, instead of silently showing the first 100.
functions_disassembleno longer documentslimit=0as "all". - Agent-clean CLI output: color is auto-disabled when stdout is not a terminal (and honors
NO_COLOR), so piped or capturedghydraoutput no longer carries ANSI codes that corrupted hex-address parsing.