3.9 KiB
3.9 KiB
Disassembly and binary analysis pipeline
Module
BinaryIndex
Status
VERIFIED
Description
Pluggable disassembly framework with Ghidra integration (BSim + version tracking) for binary analysis capabilities.
Implementation Details
- Modules:
src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly/,src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.Abstractions/,src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.B2R2/,src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.Iced/,src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Ghidra/,src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Decompiler/ - Key Classes:
DisassemblyService(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly/DisassemblyService.cs) - core disassembly orchestratorHybridDisassemblyService(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly/HybridDisassemblyService.cs) - multi-backend hybrid disassembly with quality-based plugin selectionDisassemblyPluginRegistry(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly/DisassemblyPluginRegistry.cs) - manages registered disassembly pluginsBinaryFormatDetector(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly/BinaryFormatDetector.cs) - detects ELF/PE/Mach-O format from binary headersB2R2DisassemblyPlugin(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.B2R2/B2R2DisassemblyPlugin.cs) - B2R2 backend with architecture mapping, instruction mapping, operand parsingB2R2LowUirLiftingService(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.B2R2/B2R2LowUirLiftingService.cs) - lifts machine code to LowUIR intermediate representation with SSA transformationB2R2LifterPool(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.B2R2/B2R2LifterPool.cs) - object pool for B2R2 lifter instances with warm preloadingIcedDisassemblyPlugin(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.Iced/IcedDisassemblyPlugin.cs) - Iced x86/x64 disassembler pluginGhidraDisassemblyPlugin(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Ghidra/Services/GhidraDisassemblyPlugin.cs) - Ghidra integrationGhidraDecompilerAdapter(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Decompiler/GhidraDecompilerAdapter.cs) - Ghidra decompilation with AST comparison
- Abstractions:
IDisassemblyPlugin,IDisassemblyPluginRegistry,IDisassemblyServicewith models forBinaryFormat,CpuArchitecture,DisassembledInstruction,InstructionKind, etc. - Decompiler: Full AST comparison engine with recursive parser, code normalizer, semantic equivalence checking
E2E Test Plan
- Load an x86-64 ELF binary via
HybridDisassemblyServiceand verify disassembly produces valid instructions - Verify
BinaryFormatDetectorcorrectly identifies ELF, PE, and Mach-O formats - Verify B2R2 plugin handles architecture mapping for x86, x64, ARM, AArch64
- Verify B2R2 LowUIR lifting produces valid IR with SSA form
- Verify Iced plugin disassembles x86/x64 instructions correctly
- Verify
B2R2LifterPoolwarm preloading and pool size management - Verify Ghidra decompiler adapter produces comparable ASTs via
AstComparisonEngine - Verify hybrid disassembly quality scoring selects the best plugin for each binary
Verification
- Tier 0/1/2 artifacts:
docs/qa/feature-checks/runs/binaryindex/disassembly-and-binary-analysis-pipeline/run-001/. - Result: verified.
- Evidence summary:
tier1-test-disassembly.log: Passed 45/45.tier1-test-ghidra-retest.log: Passed 122/122.tier1-test-decompiler-retest.log: Passed 35/35.tier2-test-disassembly.log: Passed 45/45.tier2-test-ghidra.log: Passed 122/122.tier2-test-decompiler.log: Passed 35/35.
- Note: initial Ghidra/Decompiler
--no-buildchecks producedInvalid TargetPath; reran with build and captured final passing evidence.