Skip to content

Releases: yuatemycat/SuperGhidra

Release v0.3.0: Adaptive Hybrid Acceleration & PDB/ARM64 Subsystem Upgrade

Choose a tag to compare

@yuatemycat yuatemycat released this 22 Oct 10:03

Summary

This pull request implements the targeted subsystem fixes triaged during the architectural audit under isolated multi-agent swarm ownership. It resolves four core limitations across acceleration, binary formats, instruction lifters, and external integrations without breaking existing root import shims or SMT soundness invariants.

Detailed triage specifications are archived in docs/specs/SWARM_ISSUES_TRIAGE.md.


Addressed Issues

1. Issue #12: Adaptive Small-Binary Hybrid Dispatcher (superghidra/acceleration/gpu_adrp_scanner.py)

  • Problem: On small binary payloads (< 5 MB), WGPU staging buffer mapping and command submission latency (~0.8–1.0 ms) caused GPU scanning to be slower than CPU NumPy SIMD.
  • Fix: Added an adaptive 5 MB threshold (ADAPTIVE_GPU_THRESHOLD_BYTES = 5 * 1024 * 1024). In auto mode, payloads under 5 MB automatically route through NumPyAdrpEngine.scan(), while payloads $\ge 5$ MB use parallel WGPU compute shaders. Explicit backend="wgpu" force override is respected.
  • Tests: tests/acceleration/test_adaptive_threshold.py.

2. Issue #13: PDB Type-Stream (TPI/IPI) CodeView Leaf Record Serialization (superghidra/formats/synthetic_symbol_exporter.py)

  • Problem: Exported PDBs included the MSF 7.0 container and GSI hash stream for public symbols, but omitted standard CodeView leaf type records in the TPI/IPI streams.
  • Fix: Implemented serialization for standard CodeView leaf types: LF_POINTER (0x1002), LF_PROCEDURE (0x1008), LF_ARGLIST (0x1201), LF_FIELDLIST (0x1203), LF_MEMBER (0x150D), and LF_STRUCTURE (0x1505). Populated the 56-byte TPI_HEADER (ti_min=0x1000) and updated dwarf_pdb_preindexer.py with off-heap SQLite ingestion for composite type records.
  • Tests: tests/formats/test_pdb_tpi_export.py.

3. Issue #14: ARM64 Cryptographic Extension Instruction Lifter (superghidra/lifters/pcode_lifter_bridge.py)

  • Problem: Cryptographic instructions in ARMv8-A binaries produced UNIMPLEMENTED during zero-JVM lifting.
  • Fix: Added P-code decoding for all 12 ARMv8-A crypto instructions:
    • AES: AESE, AESD, AESMC, AESIMC.
    • SHA-1: SHA1C, SHA1P, SHA1M, SHA1H, SHA1SU0, SHA1SU1.
    • SHA-256: SHA256H, SHA256H2, SHA256SU0, SHA256SU1.
      Lifts each instruction to a descriptive CALLOTHER usercall intrinsic node with target vector register indices. In superghidra/lifters/smt_pcode_verifier.py, unmodeled CALLOTHER opcodes strictly return UNKNOWN to prevent unsound false-positive SMT equivalence proofs.
  • Tests: tests/lifters/test_arm64_crypto_lifting.py.

4. Issue #15: Interactive Ghidra GUI Overlay Sync Bridge (superghidra/integrations/ghidra_gui_overlay_sync.py)

  • Problem: Reverse engineers working in the interactive Ghidra GUI had no automated method to visualize and merge external agent mutations (ghidra_overlay.json, .ghidra-delta.jsonl).
  • Fix: Implemented OverlaySyncBridge and the python -m superghidra overlay-sync CLI command. Generates standalone Ghidra Python scripts utilizing Ghidra FlatProgramAPI (createLabel, setComment) inside atomic transactions (startTransaction / endTransaction). Maintained non-breaking root shim ghidra_gui_overlay_sync.py.
  • Tests: tests/integrations/test_ghidra_gui_overlay_sync.py.

Benchmark Telemetry

Empirical measurements gathered via headless benchmark harness (scratch/benchmark_swarm_fixes.py):

Subsystem / Benchmark Target Measured Workload Dispatched Backend Latency Measured Throughput
GPUAdrpScanner (Issue #12) 1.0 MB binary block numpy (auto) 0.701 ms 1,427.1 MB/s
GPUAdrpScanner (Issue #12) 5.0 MB binary block wgpu (auto) 1.649 ms 3,032.3 MB/s
GPUAdrpScanner (Issue #12) 20.0 MB binary block wgpu (auto) 4.986 ms 4,011.6 MB/s
PDB TPI Serialization (Issue #13) 100 structs, 400 fields Python MSF 7.0 1.11 ms 360,652.8 records/s
ARM64 Crypto Lifter (Issue #14) 12,000 crypto insns Python P-Code 47.89 ms 250,580.5 insns/s
Overlay Sync Script (Issue #15) 5,000 mutations FlatProgramAPI 2.91 ms 1,715,560.1 mutations/s

Kingfisher Review Verification Checklist

  • Cryptographic Privacy & SMT Soundness:
    • No committed credentials, tokens, or encryption keys.
    • SMT verifier explicitly returns UNKNOWN for CALLOTHER crypto opcodes, preserving mathematical soundness invariant (Invariant 5).
  • Repository & Test Suite Integrity:
    • Full test suite passing locally: 715 passed, 21 skipped, 45 subtests passed in 63.00s.
    • Zero broken downstreams or missing imports.
  • Documentation & Tone Rules (AGENTS.md Compliance):
    • Zero ASCII box-drawing characters or decorative Unicode box art.
    • Zero promotional buzzwords (seamless, cutting-edge, blazing, state-of-the-art, game-changing).
    • Numbers accompanied by concrete benchmarks.
  • API Compatibility & Non-Breaking Shims:
    • Added root import shim ghidra_gui_overlay_sync.py with sys.modules aliasing.
    • All existing root compatibility shims remain untouched.
  • Test Coverage:
    • 4 new test suites added covering all new functionality:
      • tests/acceleration/test_adaptive_threshold.py (7 tests)
      • tests/formats/test_pdb_tpi_export.py (6 tests)
      • tests/lifters/test_arm64_crypto_lifting.py (15 tests)
      • tests/integrations/test_ghidra_gui_overlay_sync.py (13 tests)