diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/TraceRecorder.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/TraceRecorder.java index 795b6545cc..29c87640e8 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/TraceRecorder.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/TraceRecorder.java @@ -554,6 +554,9 @@ public interface TraceRecorder { TraceMemorySpace regs = getTrace().getMemoryManager().getMemoryRegisterSpace(thread, frameLevel, false); Register parent = isRegisterOnTarget(platform, thread, frameLevel, register); + if (parent == null) { + throw new IllegalArgumentException("Cannot find register " + register + " on target"); + } rv = TraceRegisterUtils.combineWithTraceParentRegisterValue(parent, rv, platform, getSnap(), regs, true); return writeThreadRegisters(platform, thread, frameLevel, Map.of(rv.getRegister(), rv)); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceRegisterUtils.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceRegisterUtils.java index db7fef1375..24fc51340a 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceRegisterUtils.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceRegisterUtils.java @@ -154,7 +154,7 @@ public enum TraceRegisterUtils { return rv.getRegisterValue(parent); } if (requireKnown) { - if (TraceMemoryState.KNOWN != regs.getState(platform, snap, reg.getBaseRegister())) { + if (TraceMemoryState.KNOWN != regs.getState(platform, snap, parent)) { throw new IllegalStateException("Must fetch " + parent + " before setting " + reg); } }