2.2 KiB
2.2 KiB
Symbol Change Tracking in Binary Diffs (SymbolChangeTracer)
Module
BinaryIndex
Status
IMPLEMENTED
Description
Extends BinaryIndex DeltaSignature module to track which specific symbols changed between binary versions (not just whether they match). Adds change metadata to SymbolMatchResult and provides detailed CFG hash and instruction hash comparison for symbol-level binary change forensics.
Implementation Details
- Modules:
src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/ - Key Classes:
SymbolChangeTracer(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/SymbolChangeTracer.cs) - traces symbol-level changes between binary versions with detailed CFG hash and instruction hash comparisonDeltaSignatureGenerator(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/DeltaSignatureGenerator.cs) - generates delta signatures capturing symbol change metadataDeltaSignatureMatcher(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/DeltaSignatureMatcher.cs) - matches signatures with change tracking awarenessCfgExtractor(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/CfgExtractor.cs) - extracts CFG for hash comparisonIrDiffGenerator(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/IrDiff/IrDiffGenerator.cs) - generates IR-level diffs for detailed change analysis
- Interfaces:
ISymbolChangeTracer(src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.DeltaSig/ISymbolChangeTracer.cs) - Models:
SymbolMatchResultwith change metadata inModels.cs - Source: SPRINT_20260112_200_003_BINDEX_symbol_tracking.md
E2E Test Plan
- Compare two binary versions with known symbol changes and verify
SymbolChangeTraceridentifies which symbols changed - Verify CFG hash comparison detects control flow changes in modified functions
- Verify instruction hash comparison detects instruction-level changes
- Verify
SymbolMatchResultincludes change metadata (added, removed, modified symbols) - Verify IR-level diff captures semantic changes beyond byte-level differences
- Verify unchanged symbols are correctly identified as stable between versions