mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GP-1543: Replace Range<Long> with Lifespan, ULongSpan, KeySpan,
FieldSpan
This commit is contained in:
parent
d0b55e1d33
commit
776413921f
349 changed files with 6102 additions and 4225 deletions
|
@ -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"))));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue