Ghidra, BSim and ghidriff integration
Verified against commit
942a18727c(2026-09-26). Re-verify with:git grep -n "AddGhidra(" -- src ':!src/__Obsoleted' ':!src/BinaryIndex'(no match means no host registers the integration) andpwsh tools/scripts/test-targeted-xunit.ps1 -Project src/BinaryIndex/__Tests/StellaOps.BinaryIndex.Ghidra.Tests/StellaOps.BinaryIndex.Ghidra.Tests.csproj -BuildProjectReferences -Restore.
Status
src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Ghidra/ is a retained shared analysis library. No shipped host registers it. AddGhidra has no caller outside the library and its tests. The result:
- Scanner reachability registers
NullBinaryPatchVerifierasIBinaryPatchVerifier(src/Scanner/__Libraries/StellaOps.Scanner.Reachability/ServiceCollectionExtensions.cs). The Ghidra-backedBinaryPatchVerifierexists but is not selected. stella binary delta-sig diff --lifter ghidrarecordsghidraas the lifter name in the predicate tooling block. It does not run Ghidra.--semanticenables semantic signature generation (SignatureOptions.IncludeSemantic) throughStellaOps.BinaryIndex.Semantic; it does not query BSim, although its help text says so.
Installing Ghidra, a BSim database or ghidriff therefore has no effect on a Stella Ops installation at the verified commit.
Library components
| Type | Behavior |
|---|---|
GhidraHeadlessManager, GhidraService (IGhidraService) | Run analyzeHeadless from GhidraHome as a local process |
GhidriffBridge (IGhidriffBridge) | Run the ghidriff Python module as a local process |
VersionTrackingService (IVersionTrackingService) | Ghidra version-tracking comparisons through the headless manager |
BSimService (IBSimService) | Queries return empty results; ingestion throws NotImplementedException. There is no BSim database client |
GhidraDisassemblyPlugin (IDisassemblyPlugin) | Returns function boundaries from Ghidra analysis with synthesized placeholder instructions (mnemonic GHIDRA), not real disassembly |
Configuration
AddGhidra(IConfiguration) binds three sections. The options are validated on start; Ghidra:GhidraHome is required.
| Section | Key | Default |
|---|---|---|
Ghidra | GhidraHome | none (required) |
JavaHome | system JAVA_HOME | |
WorkDir | <temp>/stellaops-ghidra | |
ScriptsDir | none | |
MaxMemory | 4G | |
MaxCpu | processor count | |
DefaultTimeoutSeconds | 300 | |
CleanupTempProjects | true | |
MaxConcurrentInstances | 1 | |
Enabled | true | |
BSim | ConnectionString or Host, Port, Database, Username, Password | localhost, 5432, bsim, bsim |
DefaultMinSimilarity, DefaultMaxResults | 0.7, 10 | |
Enabled | false | |
Ghidriff | PythonPath | python on Windows, python3 elsewhere, resolved from PATH |
GhidriffModulePath | none | |
DefaultIncludeDecompilation, DefaultIncludeDisassembly | true, true | |
DefaultTimeoutSeconds | 600 | |
WorkDir | <temp>/stellaops-ghidriff | |
Enabled | true |
Runtime assets
devops/runtime-assets/acquire.sh --ghidradownloads a Temurin 17 JRE and Ghidra 11.2 for offline staging.- No compose overlay ships a BSim database or a Ghidra container. The former
docker-compose.bsim.yml(absim-postgresdatabase and aghidra-headlesscontainer) lost its build context and init script,devops/docker/ghidra/, in the 2026-01-25 devops consolidation and could not be built from then on. No Stella Ops service connected to either container, so it was archived unchanged underdevops/compose/_archived/bsim-20260927/on 2026-09-27.
History
The earlier deployment guide and BSim setup guide, which described these components as a production deployment, are archived unchanged under docs-archive/modules/binary-index/ (ghidra-deployment.md, bsim-setup.md).
