mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-27 23:17:03 +08:00
Merge remote-tracking branch 'origin/patch'
This commit is contained in:
@@ -484,6 +484,9 @@ public class SymbolicPropogator {
|
|||||||
throws CancelledException {
|
throws CancelledException {
|
||||||
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<>();
|
||||||
@@ -536,6 +539,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) {
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1313,7 +1313,7 @@ STORE_TOP16: STORE_SREG^ra,EXT_CODE4E(sp) is mic_listr6 & REL6=1 & STORE_SREG &
|
|||||||
break(mic_code:2);
|
break(mic_code:2);
|
||||||
}
|
}
|
||||||
|
|
||||||
:sdbbp16 SDB16 is ISA_MODE=1 & RELP=0 & mic_op=0b100010 & SDB16 & ((mic_break=0b101100 & REL6=0) | (mic_breakr6=0b111011 & REL6=1)) {
|
:sdbbp16 SDB16 is ISA_MODE=1 & RELP=0 & mic_op=0b010001 & SDB16 & ((mic_break=0b101100 & REL6=0) | (mic_breakr6=0b111011 & REL6=1)) {
|
||||||
break(SDB16);
|
break(SDB16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user