From 11322c4982f83418c10f34097ee6d4b2e498ebc7 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 5 Aug 2021 11:18:04 -0400 Subject: [PATCH] GP-1187: Fix for cache reading issue. --- .../trace/TraceCachedWriteBytesPcodeExecutorState.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceCachedWriteBytesPcodeExecutorState.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceCachedWriteBytesPcodeExecutorState.java index ee9c0e3360..f40028c6ea 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceCachedWriteBytesPcodeExecutorState.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceCachedWriteBytesPcodeExecutorState.java @@ -131,7 +131,8 @@ public class TraceCachedWriteBytesPcodeExecutorState public byte[] read(long offset, int size) { if (source != null) { // TODO: Warn or bail when reading UNKNOWN bytes - // NOTE: Not going to worry about gaps here: + // NOTE: Read without regard to gaps + // NOTE: Cannot write those gaps, though!!! RangeSet uninitialized = cache.getUninitialized(offset, offset + size); if (!uninitialized.isEmpty()) { @@ -141,7 +142,11 @@ public class TraceCachedWriteBytesPcodeExecutorState long upper = upper(toRead); ByteBuffer buf = ByteBuffer.allocate((int) (upper - lower + 1)); source.getBytes(snap, space.getAddress(lower), buf); - cache.putData(lower, buf.array()); + for (Range rng : uninitialized.asRanges()) { + long l = lower(rng); + long u = upper(rng); + cache.putData(l, buf.array(), (int) (l - lower), (int) (u - l + 1)); + } } } byte[] data = new byte[size];