From 81d5b3f24d93a6f27c77617b59b3fdb6bcbfdeeb Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 5 May 2022 12:32:39 -0400 Subject: [PATCH] GP-1930: Make the 'refresh memory' button better --- .../images/DebuggerListingPlugin.png | Bin 43255 -> 49382 bytes .../core/debug/gui/DebuggerResources.java | 9 ++- .../gui/action/DebuggerReadsMemoryTrait.java | 56 +++++++++++++----- .../gui/listing/DebuggerListingProvider.java | 4 +- .../memory/DebuggerMemoryBytesProvider.java | 4 +- .../DebuggerListingPluginScreenShots.java | 2 +- .../listing/DebuggerListingProviderTest.java | 22 +++---- .../DebuggerMemoryBytesProviderTest.java | 22 +++---- 8 files changed, 71 insertions(+), 48 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/images/DebuggerListingPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/images/DebuggerListingPlugin.png index b353abef39a620b1fa92c69af5a84ce57a1e527d..00106d0cea694d506bcf157541c0319008f7d46c 100644 GIT binary patch literal 49382 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 literal 43255 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 diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java index eb6345bd37..7b46745fe9 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java @@ -144,8 +144,7 @@ public interface DebuggerResources { ImageIcon ICON_AUTOREAD = ResourceManager.loadImage("images/autoread.png"); // TODO: Draw a real icon. - ImageIcon ICON_READ_MEMORY = ICON_REGIONS; - //ResourceManager.loadImage("images/read-memory.png"); + ImageIcon ICON_REFRESH_MEMORY = ICON_REFRESH; ImageIcon ICON_RENAME_SNAPSHOT = ICON_TIME; @@ -784,12 +783,12 @@ public interface DebuggerResources { } } - abstract class AbstractReadSelectedMemoryAction extends DockingAction { + abstract class AbstractRefreshSelectedMemoryAction extends DockingAction { public static final String NAME = "Read Selected Memory"; - public static final Icon ICON = ICON_READ_MEMORY; + public static final Icon ICON = ICON_REFRESH_MEMORY; public static final String HELP_ANCHOR = "read_memory"; - public AbstractReadSelectedMemoryAction(Plugin owner) { + public AbstractRefreshSelectedMemoryAction(Plugin owner) { super(NAME, owner.getName()); setDescription( "(Re-)read and record memory for the selected addresses into the trace database"); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/action/DebuggerReadsMemoryTrait.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/action/DebuggerReadsMemoryTrait.java index 61585af598..94a4c3a53d 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/action/DebuggerReadsMemoryTrait.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/action/DebuggerReadsMemoryTrait.java @@ -16,7 +16,9 @@ package ghidra.app.plugin.core.debug.gui.action; import java.lang.invoke.MethodHandles; +import java.util.Collection; import java.util.Objects; +import java.util.concurrent.CompletableFuture; import docking.ActionContext; import docking.ComponentProvider; @@ -27,12 +29,16 @@ import docking.menu.MultiStateDockingAction; import docking.widgets.EventTrigger; import ghidra.app.plugin.core.debug.DebuggerCoordinates; import ghidra.app.plugin.core.debug.gui.DebuggerResources; -import ghidra.app.plugin.core.debug.gui.DebuggerResources.AbstractReadSelectedMemoryAction; +import ghidra.app.plugin.core.debug.gui.DebuggerResources.AbstractRefreshSelectedMemoryAction; import ghidra.app.plugin.core.debug.gui.action.AutoReadMemorySpec.AutoReadMemorySpecConfigFieldCodec; import ghidra.app.plugin.core.debug.utils.BackgroundUtils; import ghidra.app.services.TraceRecorder; import ghidra.app.services.TraceRecorderListener; import ghidra.app.util.viewer.listingpanel.AddressSetDisplayListener; +import ghidra.dbg.DebuggerObjectModel; +import ghidra.dbg.target.TargetMemory; +import ghidra.dbg.target.TargetObject; +import ghidra.dbg.util.PathMatcher; import ghidra.framework.options.SaveState; import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.annotation.AutoConfigStateField; @@ -49,10 +55,10 @@ public abstract class DebuggerReadsMemoryTrait { protected static final AutoConfigState.ClassHandler CONFIG_STATE_HANDLER = AutoConfigState.wireHandler(DebuggerReadsMemoryTrait.class, MethodHandles.lookup()); - protected class ReadSelectedMemoryAction extends AbstractReadSelectedMemoryAction { + protected class RefreshSelectedMemoryAction extends AbstractRefreshSelectedMemoryAction { public static final String GROUP = DebuggerResources.GROUP_GENERAL; - public ReadSelectedMemoryAction() { + public RefreshSelectedMemoryAction() { super(plugin); setToolBarData(new ToolBarData(ICON, GROUP)); setEnabled(false); @@ -60,22 +66,40 @@ public abstract class DebuggerReadsMemoryTrait { @Override public void actionPerformed(ActionContext context) { - AddressSetView selection = getSelection(); - if (selection == null || selection.isEmpty() || !current.isAliveAndReadsPresent()) { + if (!current.isAliveAndReadsPresent()) { return; } + AddressSetView selection = getSelection(); + if (selection == null || selection.isEmpty()) { + selection = visible; + } + final AddressSetView sel = selection; Trace trace = current.getTrace(); TraceRecorder recorder = current.getRecorder(); - BackgroundUtils.async(tool, trace, NAME, true, true, false, - (__, monitor) -> recorder.captureProcessMemory(selection, monitor, false)); + BackgroundUtils.async(tool, trace, NAME, true, true, false, (_t, monitor) -> { + TargetObject target = recorder.getTarget(); + DebuggerObjectModel model = target.getModel(); + model.invalidateAllLocalCaches(); + PathMatcher memMatcher = target.getSchema().searchFor(TargetMemory.class, true); + Collection memories = memMatcher.getCachedSuccessors(target).values(); + CompletableFuture[] requests = memories.stream() + .map(TargetObject::invalidateCaches) + .toArray(CompletableFuture[]::new); + return CompletableFuture.allOf(requests).thenCompose(_r -> { + return recorder.captureProcessMemory(sel, monitor, false); + }); + }); } @Override public boolean isEnabledForContext(ActionContext context) { - AddressSetView selection = getSelection(); - if (selection == null || selection.isEmpty() || !current.isAliveAndReadsPresent()) { + if (!current.isAliveAndReadsPresent()) { return false; } + AddressSetView selection = getSelection(); + if (selection == null || selection.isEmpty()) { + selection = visible; + } TraceRecorder recorder = current.getRecorder(); // TODO: Either allow partial, or provide action to intersect with accessible if (!recorder.getAccessibleProcessMemory().contains(selection)) { @@ -96,7 +120,7 @@ public abstract class DebuggerReadsMemoryTrait { } private void snapshotAdded(TraceSnapshot snapshot) { - actionReadSelected.updateEnabled(null); + actionRefreshSelected.updateEnabled(null); } private void memStateChanged(TraceAddressSnapRange range, TraceMemoryState oldIsNull, @@ -120,7 +144,7 @@ public abstract class DebuggerReadsMemoryTrait { @Override public void processMemoryAccessibilityChanged(TraceRecorder recorder) { Swing.runIfSwingOrRunLater(() -> { - actionReadSelected.updateEnabled(null); + actionRefreshSelected.updateEnabled(null); }); } } @@ -137,7 +161,7 @@ public abstract class DebuggerReadsMemoryTrait { } protected MultiStateDockingAction actionAutoRead; - protected ReadSelectedMemoryAction actionReadSelected; + protected RefreshSelectedMemoryAction actionRefreshSelected; private final AutoReadMemorySpec defaultAutoSpec = AutoReadMemorySpec.fromConfigName(VisibleROOnceAutoReadMemorySpec.CONFIG_NAME); @@ -257,10 +281,10 @@ public abstract class DebuggerReadsMemoryTrait { } } - public DockingAction installReadSelectedAction() { - actionReadSelected = new ReadSelectedMemoryAction(); - provider.addLocalAction(actionReadSelected); - return actionReadSelected; + public DockingAction installRefreshSelectedAction() { + actionRefreshSelected = new RefreshSelectedMemoryAction(); + provider.addLocalAction(actionRefreshSelected); + return actionRefreshSelected; } public AddressSetDisplayListener getDisplayListener() { diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java index e9f70ac31b..c2270b6ac9 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java @@ -244,7 +244,7 @@ public class DebuggerListingProvider extends CodeViewerProvider { protected SyncToStaticListingAction actionSyncToStaticListing; protected FollowsCurrentThreadAction actionFollowsCurrentThread; protected MultiStateDockingAction actionAutoReadMemory; - protected DockingAction actionReadSelectedMemory; + protected DockingAction actionRefreshSelectedMemory; protected DockingAction actionOpenProgram; protected MultiStateDockingAction actionTrackLocation; @@ -643,7 +643,7 @@ public class DebuggerListingProvider extends CodeViewerProvider { actionGoTo = goToTrait.installAction(); actionTrackLocation = trackingTrait.installAction(); actionAutoReadMemory = readsMemTrait.installAutoReadAction(); - actionReadSelectedMemory = readsMemTrait.installReadSelectedAction(); + actionRefreshSelectedMemory = readsMemTrait.installRefreshSelectedAction(); actionOpenProgram = OpenProgramAction.builder(plugin) .withContext(DebuggerOpenProgramActionContext.class) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java index ae81e2ed01..421d0c41a7 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java @@ -149,7 +149,7 @@ public class DebuggerMemoryBytesProvider extends ProgramByteViewerComponentProvi protected DockingAction actionGoTo; protected FollowsCurrentThreadAction actionFollowsCurrentThread; protected MultiStateDockingAction actionAutoReadMemory; - protected DockingAction actionReadSelectedMemory; + protected DockingAction actionRefreshSelectedMemory; protected MultiStateDockingAction actionTrackLocation; protected ForMemoryBytesGoToTrait goToTrait; @@ -263,7 +263,7 @@ public class DebuggerMemoryBytesProvider extends ProgramByteViewerComponentProvi actionGoTo = goToTrait.installAction(); actionTrackLocation = trackingTrait.installAction(); actionAutoReadMemory = readsMemTrait.installAutoReadAction(); - actionReadSelectedMemory = readsMemTrait.installReadSelectedAction(); + actionRefreshSelectedMemory = readsMemTrait.installRefreshSelectedAction(); } @Override diff --git a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingPluginScreenShots.java b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingPluginScreenShots.java index 7a38cc5eb7..60a689b625 100644 --- a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingPluginScreenShots.java +++ b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingPluginScreenShots.java @@ -80,7 +80,7 @@ public class DebuggerListingPluginScreenShots extends GhidraScreenShotGenerator "clone", global, SourceType.USER_DEFINED); TraceSymbol childLabel = symbolManager .labels() - .create(snap, null, tb.addr(0x00400034), + .create(snap, null, tb.addr(0x00400032), "child", global, SourceType.USER_DEFINED); @SuppressWarnings("unused") TraceSymbol exitLabel = symbolManager diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java index ed9bc6f32f..974712df6a 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProviderTest.java @@ -933,7 +933,7 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI byte[] data = incBlock(); byte[] zero = new byte[data.length]; ByteBuffer buf = ByteBuffer.allocate(data.length); - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); listingProvider.setAutoReadMemorySpec(readNone); // To verify enabled requires live target @@ -948,12 +948,12 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI traceManager.activateTrace(tb.trace); waitForSwing(); // Still - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); listingProvider.setSelection(sel); waitForSwing(); // Still - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); // Now, simulate the sequence that typically enables the action createTestModel(); @@ -970,12 +970,12 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI // NOTE: recordTargetContainerAndOpenTrace has already activated the trace // Action is still disabled, because it requires a selection - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); listingProvider.setSelection(sel); waitForSwing(); // Now, it should be enabled - assertTrue(listingProvider.actionReadSelectedMemory.isEnabled()); + assertTrue(listingProvider.actionRefreshSelectedMemory.isEnabled()); // First check nothing captured yet buf.clear(); @@ -984,7 +984,7 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI assertArrayEquals(zero, buf.array()); // Verify that the action performs the expected task - performAction(listingProvider.actionReadSelectedMemory); + performAction(listingProvider.actionRefreshSelectedMemory); waitForBusyTool(tool); waitForDomainObject(trace); @@ -999,28 +999,28 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI // Verify that setting the memory inaccessible disables the action mb.testProcess1.memory.setAccessible(false); - waitForPass(() -> assertFalse(listingProvider.actionReadSelectedMemory.isEnabled())); + waitForPass(() -> assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled())); // Verify that setting it accessible re-enables it (assuming we still have selection) mb.testProcess1.memory.setAccessible(true); - waitForPass(() -> assertTrue(listingProvider.actionReadSelectedMemory.isEnabled())); + waitForPass(() -> assertTrue(listingProvider.actionRefreshSelectedMemory.isEnabled())); // Verify that moving into the past disables the action TraceSnapshot forced = recorder.forceSnapshot(); waitForSwing(); // UI Wants to sync with new snap. Wait.... traceManager.activateSnap(forced.getKey() - 1); waitForSwing(); - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); // Verify that advancing to the present enables the action (assuming a selection) traceManager.activateSnap(forced.getKey()); waitForSwing(); - assertTrue(listingProvider.actionReadSelectedMemory.isEnabled()); + assertTrue(listingProvider.actionRefreshSelectedMemory.isEnabled()); // Verify that stopping the recording disables the action recorder.stopRecording(); waitForSwing(); - assertFalse(listingProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(listingProvider.actionRefreshSelectedMemory.isEnabled()); // TODO: When resume recording is implemented, verify action is enabled with selection } diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProviderTest.java index d6127cf6c2..41d849faad 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProviderTest.java @@ -735,7 +735,7 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge byte[] data = incBlock(); byte[] zero = new byte[data.length]; ByteBuffer buf = ByteBuffer.allocate(data.length); - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); runSwing(() -> memBytesProvider.setAutoReadMemorySpec(readNone)); // To verify enabled requires live target @@ -750,12 +750,12 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge traceManager.activateTrace(tb.trace); waitForSwing(); // Still - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); memBytesProvider.setSelection(sel); waitForSwing(); // Still - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); // Now, simulate the sequence that typically enables the action createTestModel(); @@ -772,12 +772,12 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge // NOTE: recordTargetContainerAndOpenTrace has already activated the trace // Action is still disabled, because it requires a selection - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); memBytesProvider.setSelection(sel); waitForSwing(); // Now, it should be enabled - assertTrue(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertTrue(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); // First check nothing recorded yet buf.clear(); @@ -786,7 +786,7 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge assertArrayEquals(zero, buf.array()); // Verify that the action performs the expected task - performAction(memBytesProvider.actionReadSelectedMemory); + performAction(memBytesProvider.actionRefreshSelectedMemory); waitForBusyTool(tool); waitForDomainObject(trace); @@ -801,28 +801,28 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge // Verify that setting the memory inaccessible disables the action mb.testProcess1.memory.setAccessible(false); - waitForPass(() -> assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled())); + waitForPass(() -> assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled())); // Verify that setting it accessible re-enables it (assuming we still have selection) mb.testProcess1.memory.setAccessible(true); - waitForPass(() -> assertTrue(memBytesProvider.actionReadSelectedMemory.isEnabled())); + waitForPass(() -> assertTrue(memBytesProvider.actionRefreshSelectedMemory.isEnabled())); // Verify that moving into the past disables the action TraceSnapshot forced = recorder.forceSnapshot(); waitForSwing(); // UI Wants to sync with new snap. Wait.... traceManager.activateSnap(forced.getKey() - 1); waitForSwing(); - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); // Verify that advancing to the present enables the action (assuming a selection) traceManager.activateSnap(forced.getKey()); waitForSwing(); - assertTrue(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertTrue(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); // Verify that stopping the recording disables the action recorder.stopRecording(); waitForSwing(); - assertFalse(memBytesProvider.actionReadSelectedMemory.isEnabled()); + assertFalse(memBytesProvider.actionRefreshSelectedMemory.isEnabled()); // TODO: When resume recording is implemented, verify action is enabled with selection }