From 3e63efc670aed0f3a399a0d29645317b539bac23 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 5 Aug 2021 11:07:49 -0400 Subject: [PATCH] GP-1187: Wrote test case demonstrating the issue. --- .../exec/trace/TracePcodeEmulatorTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java index 568c3ad71f..3d7da631ad 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java @@ -705,4 +705,31 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes TraceSleighUtils.evaluate("RAX", tb.trace, 1, thread, 0)); } } + + @Test + public void testCachedReadAfterSmallWrite() throws Throwable { + try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "x86:LE:64:default")) { + TraceThread thread = initTrace(tb, + List.of( + "RIP = 0x00400000;", + "RSP = 0x00110000;", + "RAX = 0x12345678;"), + List.of( + "XOR AH, AH", + "MOV RCX, RAX")); + + TracePcodeEmulator emu = new TracePcodeEmulator(tb.trace, 0); + PcodeThread emuThread = emu.newThread(thread.getPath()); + emuThread.overrideContextWithDefault(); + emuThread.stepInstruction(); + emuThread.stepInstruction(); + + try (UndoableTransaction tid = tb.startTransaction()) { + emu.writeDown(tb.trace, 1, 1, false); + } + + assertEquals(BigInteger.valueOf(0x12340078), + TraceSleighUtils.evaluate("RAX", tb.trace, 1, thread, 0)); + } + } }