GP-1543: Replace Range<Long> with Lifespan, ULongSpan, KeySpan,

FieldSpan
This commit is contained in:
Dan 2022-10-20 09:38:55 -04:00
parent d0b55e1d33
commit 776413921f
349 changed files with 6102 additions and 4225 deletions

View file

@ -23,8 +23,6 @@ import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Range;
import ghidra.app.plugin.assembler.Assembler;
import ghidra.app.plugin.assembler.Assemblers;
import ghidra.app.plugin.core.debug.gui.AbstractGhidraHeadedDebuggerGUITest;
@ -39,6 +37,7 @@ import ghidra.program.model.address.AddressSpace;
import ghidra.program.model.util.StringPropertyMap;
import ghidra.program.util.ProgramLocation;
import ghidra.trace.model.DefaultTraceLocation;
import ghidra.trace.model.Lifespan;
import ghidra.trace.model.property.TracePropertyMap;
import ghidra.trace.model.property.TracePropertyMapSpace;
import ghidra.trace.model.thread.TraceThread;
@ -101,7 +100,7 @@ public class TaintDebuggerPcodeEmulatorTest extends AbstractGhidraHeadedDebugger
TraceThread thread;
try (UndoableTransaction tid = tb.startTransaction()) {
mappingService.addMapping(
new DefaultTraceLocation(tb.trace, null, Range.atLeast(0L), tb.addr(0x55550000)),
new DefaultTraceLocation(tb.trace, null, Lifespan.nowOn(0), tb.addr(0x55550000)),
new ProgramLocation(program, tb.addr(0x00400000)), 0x1000, false);
thread = tb.getOrAddThread("Threads[0]", 0);
tb.exec(0, thread, 0, "RIP = 0x55550000;");
@ -109,8 +108,7 @@ public class TaintDebuggerPcodeEmulatorTest extends AbstractGhidraHeadedDebugger
waitForDomainObject(tb.trace);
waitForPass(() -> assertEquals(new ProgramLocation(program, tb.addr(0x00400000)),
mappingService.getOpenMappedLocation(
new DefaultTraceLocation(tb.trace, null, Range.singleton(0L),
tb.addr(0x55550000)))));
new DefaultTraceLocation(tb.trace, null, Lifespan.at(0), tb.addr(0x55550000)))));
try (UndoableTransaction tid = UndoableTransaction.start(program, "Assemble")) {
program.getMemory()
@ -134,7 +132,7 @@ public class TaintDebuggerPcodeEmulatorTest extends AbstractGhidraHeadedDebugger
traceTaintMap.getPropertyMapRegisterSpace(thread, 0, false);
assertEquals(TaintTracePcodeEmulatorTest.makeTaintEntries(tb.trace,
Range.closed(scratch, -1L), rs, Set.of(0L), "test_0"),
Set.copyOf(taintRegSpace.getEntries(Range.singleton(scratch), tb.reg("RAX"))));
Lifespan.span(scratch, -1), rs, Set.of(0L), "test_0"),
Set.copyOf(taintRegSpace.getEntries(Lifespan.at(scratch), tb.reg("RAX"))));
}
}

View file

@ -26,12 +26,10 @@ import java.util.stream.Collectors;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.Test;
import com.google.common.collect.Range;
import ghidra.app.plugin.assembler.*;
import ghidra.dbg.target.schema.SchemaContext;
import ghidra.dbg.target.schema.XmlSchemaContext;
import ghidra.dbg.target.schema.TargetObjectSchema.SchemaName;
import ghidra.dbg.target.schema.XmlSchemaContext;
import ghidra.pcode.emu.PcodeThread;
import ghidra.pcode.exec.PcodeExecutorStatePiece.Reason;
import ghidra.pcode.exec.trace.AbstractTracePcodeEmulatorTest;
@ -48,22 +46,22 @@ import ghidra.trace.model.memory.TraceMemoryManager;
import ghidra.trace.model.memory.TraceMemorySpace;
import ghidra.trace.model.property.TracePropertyMap;
import ghidra.trace.model.property.TracePropertyMapSpace;
import ghidra.trace.model.target.TraceObjectKeyPath;
import ghidra.trace.model.target.TraceObject.ConflictResolution;
import ghidra.trace.model.target.TraceObjectKeyPath;
import ghidra.trace.model.thread.TraceThread;
import ghidra.util.database.UndoableTransaction;
public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest {
public static Map.Entry<TraceAddressSnapRange, String> makeTaintEntry(Trace trace,
Range<Long> span, AddressSpace space, long offset, String taint) {
Lifespan span, AddressSpace space, long offset, String taint) {
Address addr = space.getAddress(offset);
return Map.entry(new ImmutableTraceAddressSnapRange(new AddressRangeImpl(addr, addr), span),
taint);
}
public static Set<Map.Entry<TraceAddressSnapRange, String>> makeTaintEntries(Trace trace,
Range<Long> span, AddressSpace space, Set<Long> offs, String taint) {
Lifespan span, AddressSpace space, Set<Long> offs, String taint) {
return offs.stream()
.map(o -> makeTaintEntry(trace, span, space, o, taint))
.collect(Collectors.toSet());
@ -83,7 +81,7 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
try (UndoableTransaction tid = tb.startTransaction()) {
TracePropertyMap<String> taintMap = tb.trace.getAddressPropertyManager()
.getOrCreatePropertyMap("Taint", String.class);
taintMap.set(Range.atLeast(0L), tb.range(0x00400000, 0x00400003), "test_0");
taintMap.set(Lifespan.nowOn(0), tb.range(0x00400000, 0x00400003), "test_0");
}
TaintTracePcodeEmulator emu = new TaintTracePcodeEmulator(tb.host, 0);
@ -113,7 +111,7 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
.getOrCreatePropertyMap("Taint", String.class);
TracePropertyMapSpace<String> mapSpace =
taintMap.getPropertyMapRegisterSpace(thread, 0, true);
mapSpace.set(Range.atLeast(0L), regEBX, "test_0");
mapSpace.set(Lifespan.nowOn(0), regEBX, "test_0");
}
TaintTracePcodeEmulator emu = new TaintTracePcodeEmulator(tb.host, 0);
@ -182,8 +180,8 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
// TODO: Might be nice to coalesce identical values
// Becomes the 2D cover optimization problem. Still could do some easy cases.
assertEquals(
makeTaintEntries(tb.trace, Range.atLeast(1L), rs, Set.of(0L, 1L, 2L, 3L), "test_0"),
Set.copyOf(mapSpace.getEntries(Range.singleton(1L), tb.reg("RAX"))));
makeTaintEntries(tb.trace, Lifespan.nowOn(1), rs, Set.of(0L, 1L, 2L, 3L), "test_0"),
Set.copyOf(mapSpace.getEntries(Lifespan.at(1), tb.reg("RAX"))));
}
}
@ -217,12 +215,12 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
TracePropertyMap<String> taintMap =
tb.trace.getAddressPropertyManager().getPropertyMap("Taint", String.class);
assertEquals(makeTaintEntries(tb.trace, Range.singleton(1L), ram, Set.of(
assertEquals(makeTaintEntries(tb.trace, Lifespan.at(1), ram, Set.of(
0x00600000L, 0x00600001L, 0x00600002L, 0x00600003L,
0x00600004L, 0x00600005L, 0x00600006L, 0x00600007L),
"test_0"),
Set.copyOf(taintMap.getEntries(
Range.singleton(1L), tb.range(0x00600000, 0x00600007))));
Lifespan.at(1), tb.range(0x00600000, 0x00600007))));
}
}
@ -256,7 +254,7 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
taintMap.getPropertyMapRegisterSpace(thread, 0, false);
assertEquals(Set.of(),
Set.copyOf(mapSpace.getEntries(Range.singleton(1L), tb.reg("RAX"))));
Set.copyOf(mapSpace.getEntries(Lifespan.at(1), tb.reg("RAX"))));
}
}
@ -290,7 +288,7 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
taintMap.getPropertyMapRegisterSpace(thread, 0, false);
assertEquals(Set.of(),
Set.copyOf(mapSpace.getEntries(Range.singleton(1L), tb.reg("RAX"))));
Set.copyOf(mapSpace.getEntries(Lifespan.at(1), tb.reg("RAX"))));
}
}
@ -313,7 +311,7 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
x64.addMappedRange(tb.addr(0x00000000), tb.addr(x64, 0x00400000), 0x10000);
x64.addMappedRange(tb.addr(0x20000000), tb.addr(x64, 0x00600000), 0x10000);
objects.createObject(TraceObjectKeyPath.parse("Targets[0].Threads[0].Registers"))
.insert(Range.atLeast(0L), ConflictResolution.DENY);
.insert(Lifespan.nowOn(0), ConflictResolution.DENY);
// TODO: Make Sleigh work in the guest platform
TraceMemorySpace regs = mm.getMemoryRegisterSpace(thread, 0, true);
regs.setValue(x64, 0,
@ -345,12 +343,12 @@ public class TaintTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
TracePropertyMap<String> taintMap =
tb.trace.getAddressPropertyManager().getPropertyMap("Taint", String.class);
assertEquals(makeTaintEntries(tb.trace, Range.singleton(1L), ram, Set.of(
assertEquals(makeTaintEntries(tb.trace, Lifespan.at(1), ram, Set.of(
0x20000000L, 0x20000001L, 0x20000002L, 0x20000003L,
0x20000004L, 0x20000005L, 0x20000006L, 0x20000007L),
"test_0"),
Set.copyOf(taintMap.getEntries(
Range.singleton(1L), tb.range(0x20000000, 0x20000007))));
Lifespan.at(1), tb.range(0x20000000, 0x20000007))));
}
}
}