mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
GP-4643: Add a JIT-accelerated p-code emulator (API/scripting only)
This commit is contained in:
parent
20285e267d
commit
a8fae1fe5b
320 changed files with 32638 additions and 630 deletions
|
@ -19,6 +19,7 @@ import java.math.BigInteger;
|
|||
|
||||
import ghidra.pcode.exec.ConcretionError;
|
||||
import ghidra.pcode.exec.PcodeArithmetic;
|
||||
import ghidra.program.model.address.AddressSpace;
|
||||
import ghidra.program.model.lang.Endian;
|
||||
import ghidra.trace.model.memory.TraceMemoryState;
|
||||
|
||||
|
@ -58,15 +59,15 @@ public enum TraceMemoryStatePcodeArithmetic implements PcodeArithmetic<TraceMemo
|
|||
}
|
||||
|
||||
@Override
|
||||
public TraceMemoryState modBeforeStore(int sizeout, int sizeinAddress,
|
||||
TraceMemoryState inAddress, int sizeinValue, TraceMemoryState inValue) {
|
||||
public TraceMemoryState modBeforeStore(int sizeinOffset, AddressSpace space,
|
||||
TraceMemoryState inOffset, int sizeinValue, TraceMemoryState inValue) {
|
||||
return inValue; // Shouldn't see STORE during Sleigh eval, anyway
|
||||
}
|
||||
|
||||
@Override
|
||||
public TraceMemoryState modAfterLoad(int sizeout, int sizeinAddress, TraceMemoryState inAddress,
|
||||
int sizeinValue, TraceMemoryState inValue) {
|
||||
if (inAddress == TraceMemoryState.KNOWN && inValue == TraceMemoryState.KNOWN) {
|
||||
public TraceMemoryState modAfterLoad(int sizeinOffset, AddressSpace space,
|
||||
TraceMemoryState inOffset, int sizeinValue, TraceMemoryState inValue) {
|
||||
if (inOffset == TraceMemoryState.KNOWN && inValue == TraceMemoryState.KNOWN) {
|
||||
return TraceMemoryState.KNOWN;
|
||||
}
|
||||
return TraceMemoryState.UNKNOWN;
|
||||
|
|
|
@ -24,8 +24,8 @@ import ghidra.program.model.address.Address;
|
|||
import ghidra.program.model.address.AddressSetView;
|
||||
import ghidra.program.model.listing.*;
|
||||
import ghidra.trace.model.memory.TraceMemoryRegion;
|
||||
import ghidra.util.ComparatorMath;
|
||||
import ghidra.util.LockHold;
|
||||
import ghidra.util.MathUtilities;
|
||||
import ghidra.util.exception.*;
|
||||
|
||||
public class DBTraceProgramViewRootModule implements ProgramModule {
|
||||
|
@ -195,7 +195,7 @@ public class DBTraceProgramViewRootModule implements ProgramModule {
|
|||
.getMinAddress();
|
||||
}
|
||||
// TODO: There has got to be a better way
|
||||
return reduceRegions(TraceMemoryRegion::getMinAddress, ComparatorMath::cmin);
|
||||
return reduceRegions(TraceMemoryRegion::getMinAddress, MathUtilities::cmin);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -206,7 +206,7 @@ public class DBTraceProgramViewRootModule implements ProgramModule {
|
|||
.getMaxAddress();
|
||||
}
|
||||
// TODO: There has got to be a better way
|
||||
return reduceRegions(TraceMemoryRegion::getMaxAddress, ComparatorMath::cmax);
|
||||
return reduceRegions(TraceMemoryRegion::getMaxAddress, MathUtilities::cmax);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -983,6 +983,7 @@ public class BytesTracePcodeEmulatorTest extends AbstractTracePcodeEmulatorTest
|
|||
TraceSleighUtils.evaluate("r1", tb.trace, 1, thread, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testITE_ContextFlow() throws Throwable {
|
||||
try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "ARM:LE:32:v8T")) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue