mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
GP-5266: Only track on user click or address change.
This commit is contained in:
parent
2a628178b3
commit
5d71f073f4
10 changed files with 135 additions and 32 deletions
|
@ -470,4 +470,25 @@ public class Sequence implements Comparable<Sequence> {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean differsOnlyByPatch(Sequence that) {
|
||||
int size = this.steps.size();
|
||||
if (size == that.steps.size()) {
|
||||
if (size == 0) {
|
||||
return true;
|
||||
}
|
||||
if (!this.steps.subList(0, size - 1).equals(that.steps.subList(0, size - 1))) {
|
||||
return false;
|
||||
}
|
||||
Step thisLast = this.steps.getLast();
|
||||
Step thatLast = that.steps.getLast();
|
||||
return thisLast.equals(thatLast) ||
|
||||
thisLast instanceof PatchStep && thatLast instanceof PatchStep;
|
||||
}
|
||||
if (size == that.steps.size() - 1) {
|
||||
Step thatLast = that.steps.getLast();
|
||||
return thatLast instanceof PatchStep;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -673,4 +673,20 @@ public class TraceSchedule implements Comparable<TraceSchedule> {
|
|||
public TraceSchedule assumeRecorded() {
|
||||
return new TraceSchedule(snap, steps, pSteps, Source.RECORD);
|
||||
}
|
||||
|
||||
public boolean differsOnlyByPatch(TraceSchedule that) {
|
||||
if (this.snap != that.snap) {
|
||||
return false;
|
||||
}
|
||||
if (this.pSteps.isNop() != that.pSteps.isNop()) {
|
||||
return false;
|
||||
}
|
||||
if (this.pSteps.isNop()) {
|
||||
return this.steps.differsOnlyByPatch(that.steps);
|
||||
}
|
||||
if (!this.steps.equals(that.steps)) {
|
||||
return false;
|
||||
}
|
||||
return this.pSteps.differsOnlyByPatch(that.pSteps);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -470,4 +470,37 @@ public class TraceScheduleTest extends AbstractGhidraHeadlessIntegrationTest {
|
|||
"t0-{r0=0x200000001};t0-{r1l=0x3}", time.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDiffersOnlyByPatch() throws Exception {
|
||||
assertTrue(TraceSchedule.parse("1").differsOnlyByPatch(TraceSchedule.parse("1")));
|
||||
assertTrue(TraceSchedule.parse("1:1").differsOnlyByPatch(TraceSchedule.parse("1:1")));
|
||||
assertTrue(TraceSchedule.parse("1:1.1").differsOnlyByPatch(TraceSchedule.parse("1:1.1")));
|
||||
assertTrue(TraceSchedule.parse("1:1;{r0=1}")
|
||||
.differsOnlyByPatch(TraceSchedule.parse("1:1;{r0=1}")));
|
||||
assertTrue(TraceSchedule.parse("1:1.1;{r0=1}")
|
||||
.differsOnlyByPatch(TraceSchedule.parse("1:1.1;{r0=1}")));
|
||||
|
||||
assertFalse(TraceSchedule.parse("1").differsOnlyByPatch(TraceSchedule.parse("1:1")));
|
||||
assertFalse(TraceSchedule.parse("1:1").differsOnlyByPatch(TraceSchedule.parse("1")));
|
||||
|
||||
assertFalse(TraceSchedule.parse("1:1").differsOnlyByPatch(TraceSchedule.parse("1:2")));
|
||||
assertFalse(TraceSchedule.parse("1:2").differsOnlyByPatch(TraceSchedule.parse("1:1")));
|
||||
|
||||
assertFalse(TraceSchedule.parse("1:1").differsOnlyByPatch(TraceSchedule.parse("1:1.1")));
|
||||
assertFalse(TraceSchedule.parse("1:1.1").differsOnlyByPatch(TraceSchedule.parse("1:1")));
|
||||
|
||||
assertTrue(TraceSchedule.parse("1").differsOnlyByPatch(TraceSchedule.parse("1:{r0=1}")));
|
||||
assertFalse(TraceSchedule.parse("1:{r0=1}").differsOnlyByPatch(TraceSchedule.parse("1")));
|
||||
|
||||
assertTrue(
|
||||
TraceSchedule.parse("1:1").differsOnlyByPatch(TraceSchedule.parse("1:1;{r0=1}")));
|
||||
assertFalse(
|
||||
TraceSchedule.parse("1:1;{r0=1}").differsOnlyByPatch(TraceSchedule.parse("1:1")));
|
||||
|
||||
assertTrue(
|
||||
TraceSchedule.parse("1:1.1").differsOnlyByPatch(TraceSchedule.parse("1:1.1;{r0=1}")));
|
||||
assertFalse(
|
||||
TraceSchedule.parse("1:1.1;{r0=1}").differsOnlyByPatch(TraceSchedule.parse("1:1.1")));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue