Merge remote-tracking branch 'origin/GP-6442_emteere_SpuriousJumpCallReferences' into patch

This commit is contained in:
Ryan Kurtz
2026-02-25 12:46:43 -05:00
@@ -485,6 +485,9 @@ public class SymbolicPropogator {
visitedBody = new AddressSet(); visitedBody = new AddressSet();
AddressSet conflicts = new AddressSet(); AddressSet conflicts = new AddressSet();
// Locations that were jump and are now call targets and might be on saved future flows
HashSet<Address> doNotFlowTo = new HashSet<>();
// prime the context stack with the entry point address // prime the context stack with the entry point address
Stack<SavedFlowState> contextStack = new Stack<>(); Stack<SavedFlowState> contextStack = new Stack<>();
contextStack.push(new SavedFlowState(vContext, null, fromAddr, startAddr, NOT_CONTINUING_CURRRENTLY)); contextStack.push(new SavedFlowState(vContext, null, fromAddr, startAddr, NOT_CONTINUING_CURRRENTLY));
@@ -537,6 +540,11 @@ public class SymbolicPropogator {
} }
} }
// don't follow flow if on list of jump targets that were turned into calls
if (doNotFlowTo.contains(nextAddr)) {
continue;
}
HashSet<Address> visitSet = visitedMap.get(nextAddr); HashSet<Address> visitSet = visitedMap.get(nextAddr);
if (visitSet != null) { if (visitSet != null) {
// already flowed to nextAddr from flowFromAddr // already flowed to nextAddr from flowFromAddr
@@ -636,6 +644,9 @@ public class SymbolicPropogator {
Address targets[] = getInstructionFlows(instr); Address targets[] = getInstructionFlows(instr);
for (Address target : targets) { for (Address target : targets) {
handleFunctionSideEffects(instr, target, monitor); handleFunctionSideEffects(instr, target, monitor);
// a jump target has already been pushed as a future flow trace
// need to make sure values aren't propagated into the call targets
doNotFlowTo.add(target);
} }
} }