Changed
- Ghidra 11.x + 12.x: The plugin builds and runs against both Ghidra 11.x and 12.x; CI builds a matrix over the latest of each. Per-version extension artifacts are stamped with the matching
ghidraVersion(which must equal the running Ghidra exactly). - Ghidra 12.x: Migrated the plugin to build against Ghidra 12.x (tested on 12.1.2). Build with
GHIDRA_HOMEpointing at the install, or-Dghidra.version=to stamp the extension. - Javalin HTTP server: The plugin now embeds a Javalin/Jetty server with a layered
resource/service/dto/hateoas/middleware/serverstructure, replacing the previous JDKHttpServer+endpoints/implementation. Shaded into a singleGhydra.jar.
Fixed
- Locked buffer crashes: DB-iterator traversals are marshalled onto the EDT (
GhidraSwing.runRead), fixingIOException: Locked buffercrashes during concurrent analysis. - StackOverflow containment: A self-referential pointer made Ghidra's own label resolution recurse without bound; reads now contain the resulting
Errorand fail the request cleanly instead of crashing the EDT. - Call graph callees: Callee discovery scans the whole function body instead of just the entry address, so
/analysis/callgraphand/analysis/calleesreturn results. - Client errors return 400: Malformed input (bad addresses, hex, JSON bodies, invalid params) maps to HTTP 400 instead of 500;
/xrefspagination no longer returns empty pages past the first. - Bridge/CLI field sync: Bridge and CLI formatters match the server's response field names (decompilation, variables, xrefs, segments, memory), and integral JSON numbers are no longer rendered as floats.