From c3419572aeb7e913bbfaaab7ea4d0ae85a26085e Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Wed, 4 Dec 2024 08:41:55 -0500 Subject: [PATCH] GP-5164: Fix DebuggerAddRegionDialog. --- .../images/DebuggerRegionsPlugin.png | Bin 19246 -> 19630 bytes .../gui/memory/DebuggerAddRegionDialog.java | 58 +++++++++++++----- .../gui/memory/DebuggerRegionsProvider.java | 2 +- .../memory/DebuggerRegionsProviderTest.java | 6 +- .../dbg/target/schema/BadSchemaException.java | 30 +++++++++ .../dbg/target/schema/TargetObjectSchema.java | 7 +-- .../memory/DBTraceObjectMemoryRegion.java | 9 ++- .../database/target/DBTraceObjectManager.java | 6 +- 8 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/BadSchemaException.java diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegionsPlugin/images/DebuggerRegionsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerRegionsPlugin/images/DebuggerRegionsPlugin.png index d9261e7e807bf7e937dc21bdaa241605c09a7892..95520abc1e5cb3302cc33e71d7da8ad05be44545 100644 GIT binary patch literal 19630 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 literal 19246 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 diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerAddRegionDialog.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerAddRegionDialog.java index 37fd5b948d..2b8eae7b3d 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerAddRegionDialog.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerAddRegionDialog.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -16,6 +16,8 @@ package ghidra.app.plugin.core.debug.gui.memory; import java.awt.Font; +import java.util.List; +import java.util.Set; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -25,18 +27,21 @@ import docking.ReusableDialogComponentProvider; import docking.widgets.model.GAddressRangeField; import docking.widgets.model.GSpanField; import ghidra.app.plugin.core.debug.utils.MiscellaneousUtils; +import ghidra.dbg.target.TargetMemoryRegion; +import ghidra.dbg.target.schema.TargetObjectSchema; +import ghidra.debug.api.tracemgr.DebuggerCoordinates; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.*; import ghidra.trace.model.Lifespan; import ghidra.trace.model.Trace; -import ghidra.trace.model.memory.TraceOverlappedRegionException; -import ghidra.util.exception.DuplicateNameException; +import ghidra.trace.model.memory.TraceMemoryFlag; +import ghidra.trace.model.target.TraceObjectKeyPath; import ghidra.util.layout.PairLayout; public class DebuggerAddRegionDialog extends ReusableDialogComponentProvider { private Trace trace; - private final JTextField fieldName = new JTextField(); + private final JTextField fieldPath = new JTextField(); private final GAddressRangeField fieldRange = new GAddressRangeField(); private final JTextField fieldLength = new JTextField(); private final GSpanField fieldLifespan = new GSpanField(); @@ -53,8 +58,8 @@ public class DebuggerAddRegionDialog extends ReusableDialogComponentProvider { panel.setBorder(new EmptyBorder(10, 10, 10, 10)); - panel.add(new JLabel("Name: ")); - panel.add(fieldName); + panel.add(new JLabel("Path: ")); + panel.add(fieldPath); panel.add(new JLabel("Range: ")); panel.add(fieldRange); @@ -81,8 +86,8 @@ public class DebuggerAddRegionDialog extends ReusableDialogComponentProvider { return new AddressRangeImpl(min, min.addWrap(lengthMinus1)); } - public void setName(String name) { - fieldName.setText(name); + public void setPath(String path) { + fieldPath.setText(path); } protected void setFieldLength(long length) { @@ -149,17 +154,33 @@ public class DebuggerAddRegionDialog extends ReusableDialogComponentProvider { addRegionAndClose(); } - protected void setValues(Trace trace, Lifespan lifespan) { - this.trace = trace; + protected String computeDefaultPath(DebuggerCoordinates current) { + TargetObjectSchema rootSchema = trace.getObjectManager().getRootSchema(); + if (rootSchema == null) { + return ""; + } + List suitable = rootSchema.searchForSuitableContainer(TargetMemoryRegion.class, + current.getPath().getKeyList()); + if (suitable == null) { + return ""; + } + + return TraceObjectKeyPath.of(suitable).index("New").toString(); + } + + protected void setValues(DebuggerCoordinates current) { + this.trace = current.getTrace(); AddressFactory af = trace.getBaseAddressFactory(); this.fieldRange.setAddressFactory(af); this.fieldRange.setRange(range(af.getDefaultAddressSpace().getAddress(0), 0)); this.fieldLength.setText("0x1"); + Lifespan lifespan = Lifespan.nowOn(current.getSnap()); this.fieldLifespan.setLifespan(lifespan); + this.fieldPath.setText(computeDefaultPath(current)); } - public void show(PluginTool tool, Trace trace, long snap) { - setValues(trace, Lifespan.nowOn(snap)); + public void show(PluginTool tool, DebuggerCoordinates current) { + setValues(current); tool.showDialog(this); } @@ -171,13 +192,16 @@ public class DebuggerAddRegionDialog extends ReusableDialogComponentProvider { } protected void addRegionAndClose() { - try (Transaction tx = trace.openTransaction("Add region: " + fieldName)) { + try (Transaction tx = trace.openTransaction("Add region: " + fieldPath)) { trace.getMemoryManager() - .addRegion(fieldName.getText(), fieldLifespan.getLifespan(), - fieldRange.getRange()); + .addRegion( + fieldPath.getText(), + fieldLifespan.getLifespan(), fieldRange.getRange(), + Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.WRITE, + TraceMemoryFlag.EXECUTE)); close(); } - catch (TraceOverlappedRegionException | DuplicateNameException e) { + catch (Exception e) { setStatusText(e.getMessage()); } } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProvider.java index 8e0a461de7..763ffac514 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProvider.java @@ -467,7 +467,7 @@ public class DebuggerRegionsProvider extends ComponentProviderAdapter { if (current.getTrace() == null) { return; } - addRegionDialog.show(tool, current.getTrace(), current.getSnap()); + addRegionDialog.show(tool, current); } private void activatedDeleteRegions(ActionContext ctx) { diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProviderTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProviderTest.java index 4a7dfc152c..d9012fcc91 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProviderTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProviderTest.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -495,7 +495,7 @@ public class DebuggerRegionsProviderTest extends AbstractGhidraHeadedDebuggerTes performEnabledAction(provider, provider.actionAddRegion, false); DebuggerAddRegionDialog dialog = waitForDialogComponent(DebuggerAddRegionDialog.class); runSwing(() -> { - dialog.setName("Memory[heap]"); + dialog.setPath("Memory[heap]"); dialog.setFieldLength(0x1000); dialog.lengthChanged(); // simulate ENTER/focus-exited dialog.okCallback(); diff --git a/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/BadSchemaException.java b/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/BadSchemaException.java new file mode 100644 index 0000000000..c39e32dbbf --- /dev/null +++ b/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/BadSchemaException.java @@ -0,0 +1,30 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ghidra.dbg.target.schema; + +/** + * An exception that indicates a path or object does not provide a required interface. + */ +public class BadSchemaException extends IllegalStateException { + /** + * Construct an exception with a human-readable message. + * + * @param message the message + */ + public BadSchemaException(String message) { + super(message); + } +} diff --git a/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/TargetObjectSchema.java b/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/TargetObjectSchema.java index 67d689ea82..e44f62afbc 100644 --- a/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/TargetObjectSchema.java +++ b/Ghidra/Debug/Framework-Debugging/src/main/java/ghidra/dbg/target/schema/TargetObjectSchema.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -893,12 +893,9 @@ public interface TargetObjectSchema { List schemas = getSuccessorSchemas(path); for (; path != null; path = PathUtils.parent(path)) { TargetObjectSchema schema = schemas.get(path.size()); - if (!schema.isCanonicalContainer()) { - continue; - } TargetObjectSchema deSchema = schema.getContext().getSchema(schema.getDefaultElementSchema()); - if (deSchema.getInterfaces().contains(type)) { + if (deSchema.getInterfaces().contains(type) && schema.isCanonicalContainer()) { return path; } List inAgg = Private.searchForSuitableContainerInAggregate(schema, type); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceObjectMemoryRegion.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceObjectMemoryRegion.java index 43a65dadb7..0042e16bd4 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceObjectMemoryRegion.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceObjectMemoryRegion.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -310,8 +310,7 @@ public class DBTraceObjectMemoryRegion implements TraceObjectMemoryRegion, DBTra public void setFlags(Lifespan lifespan, Collection flags) { try (LockHold hold = object.getTrace().lockWrite()) { for (TraceMemoryFlag flag : TraceMemoryFlag.values()) { - Boolean val = flags.contains(flag) ? true : null; - object.setValue(lifespan, keyForFlag(flag), val); + object.setValue(lifespan, keyForFlag(flag), flags.contains(flag)); } } } @@ -329,7 +328,7 @@ public class DBTraceObjectMemoryRegion implements TraceObjectMemoryRegion, DBTra public void clearFlags(Lifespan lifespan, Collection flags) { try (LockHold hold = object.getTrace().lockWrite()) { for (TraceMemoryFlag flag : flags) { - object.setValue(lifespan, keyForFlag(flag), null); + object.setValue(lifespan, keyForFlag(flag), false); } } } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java index a71e5bfd05..055b124216 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java @@ -539,9 +539,9 @@ public class DBTraceObjectManager implements TraceObjectManager, DBTraceManager Class targetIf = TraceObjectInterfaceUtils.toTargetIf(iface); TargetObjectSchema schema = rootSchema.getSuccessorSchema(keyList); if (!schema.getInterfaces().contains(targetIf)) { - throw new IllegalStateException( - "Schema " + schema + " at " + PathUtils.toString(keyList) + - " does not provide interface " + iface.getSimpleName()); + throw new BadSchemaException( + "Schema " + schema + " at '" + PathUtils.toString(keyList) + + "' does not provide interface " + iface.getSimpleName()); } DBTraceObject obj = createObject(TraceObjectKeyPath.of(keyList)); return obj.queryInterface(iface);