diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterContainerImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterContainerImpl.java index 89ce388d5d..122334b94f 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterContainerImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterContainerImpl.java @@ -30,7 +30,6 @@ import ghidra.dbg.target.TargetRegisterBank; import ghidra.dbg.target.schema.*; import ghidra.dbg.target.schema.TargetObjectSchema.ResyncMode; import ghidra.dbg.util.ConversionUtils; -import ghidra.program.model.address.AddressSpace; @TargetObjectSchemaInfo( name = "RegisterContainer", @@ -105,7 +104,6 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp @Override public CompletableFuture> readRegistersNamed( Collection names) { - AddressSpace space = getModel().getAddressSpace("ram"); return model.gateFuture(thread.listRegisters().thenCompose(regs -> { if (regs.size() != registersByName.size() || getCachedElements().isEmpty()) { return requestElements(false); @@ -138,8 +136,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp if (value.longValue() != 0) { String newval = reg.getName() + " : " + value.toString(16); reg.changeAttributes(List.of(), Map.of( // - DISPLAY_ATTRIBUTE_NAME, newval, // - "Address", space.getAddress(value.longValue()) // + DISPLAY_ATTRIBUTE_NAME, newval // ), "Refreshed"); reg.setModified(!value.toString(16).equals(oldval)); } diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterImpl.java index a17e68d2ba..5a1a16b772 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetRegisterImpl.java @@ -24,7 +24,6 @@ import agent.dbgeng.model.iface2.DbgModelTargetRegisterContainerAndBank; import ghidra.dbg.target.TargetRegister; import ghidra.dbg.target.schema.*; import ghidra.dbg.util.PathUtils; -import ghidra.program.model.address.Address; @TargetObjectSchemaInfo( name = "RegisterDescriptor", @@ -34,7 +33,6 @@ import ghidra.program.model.address.Address; @TargetAttributeType( name = TargetRegister.CONTAINER_ATTRIBUTE_NAME, type = DbgModelTargetRegisterContainerImpl.class), - @TargetAttributeType(name = "Address", type = Address.class), @TargetAttributeType(type = Void.class) }) public class DbgModelTargetRegisterImpl extends DbgModelTargetObjectImpl implements DbgModelTargetRegister { diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetStackFrameRegister.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetStackFrameRegister.java index 07859b2aca..33add4b14a 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetStackFrameRegister.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetStackFrameRegister.java @@ -25,15 +25,12 @@ import ghidra.dbg.target.TargetObject; import ghidra.dbg.target.TargetRegister; import ghidra.dbg.target.schema.*; import ghidra.dbg.util.PathUtils; -import ghidra.program.model.address.Address; -import ghidra.program.model.address.AddressSpace; @TargetObjectSchemaInfo( name = "RegisterValue", elements = { @TargetElementType(type = Void.class) }, attributes = { - @TargetAttributeType(name = "Address", type = Address.class), @TargetAttributeType(type = Void.class) }) public class GdbModelTargetStackFrameRegister extends DefaultTargetObject @@ -85,12 +82,10 @@ public class GdbModelTargetStackFrameRegister boolean modified = (bigval.longValue() != 0 && value.equals(oldval)); String newval = getName() + " : " + value; - AddressSpace space = getModel().getAddressSpace("ram"); changeAttributes(List.of(), Map.of( // VALUE_ATTRIBUTE_NAME, value, // DISPLAY_ATTRIBUTE_NAME, newval, // - MODIFIED_ATTRIBUTE_NAME, modified, // - "Address", space.getAddress(bigval.longValue()) // + MODIFIED_ATTRIBUTE_NAME, modified // ), "Value Updated"); } diff --git a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetStackFrameRegisterImpl.java b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetStackFrameRegisterImpl.java index a431b8efd3..8319004a3d 100644 --- a/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetStackFrameRegisterImpl.java +++ b/Ghidra/Debug/Debugger-agent-lldb/src/main/java/agent/lldb/model/impl/LldbModelTargetStackFrameRegisterImpl.java @@ -25,7 +25,6 @@ import agent.lldb.model.iface2.LldbModelTargetStackFrameRegister; import ghidra.dbg.target.schema.*; import ghidra.dbg.util.ConversionUtils; import ghidra.dbg.util.PathUtils; -import ghidra.program.model.address.AddressSpace; @TargetObjectSchemaInfo( name = "RegisterValue", @@ -105,15 +104,13 @@ public class LldbModelTargetStackFrameRegisterImpl } BigInteger val = new BigInteger(value, 16); byte[] bytes = ConversionUtils.bigIntegerToBytes((int) getRegister().GetByteSize(), val); - AddressSpace space = getModel().getAddressSpace("ram"); changeAttributes(List.of(), Map.of( // VALUE_ATTRIBUTE_NAME, value // ), "Refreshed"); if (val.longValue() != 0) { String newval = getDescription(0); changeAttributes(List.of(), Map.of( // - DISPLAY_ATTRIBUTE_NAME, newval, // - "Address", space.getAddress(val.longValue()) // + DISPLAY_ATTRIBUTE_NAME, newval // ), "Refreshed"); setModified(!value.equals(oldValue)); } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTable.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTable.java index d47cb32cd6..c778b0780b 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTable.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTable.java @@ -296,6 +296,10 @@ public class ObjectTable implements ObjectPane { Long lval = (Long) value; addr = container.getTargetObject().getModel().getAddress("ram", lval); } + if (value instanceof String) { + String sval = (String) value; + addr = stringToAddress(container.getTargetObject(), addr, sval); + } if (modelService != null) { TraceRecorder recorder = modelService.getRecorderForSuccessor(container.getTargetObject()); @@ -306,4 +310,23 @@ public class ObjectTable implements ObjectPane { } } + private Address stringToAddress(TargetObject selectedObject, Address addr, String sval) { + try { + Long lval = Long.decode(sval); + addr = selectedObject.getModel().getAddress("ram", lval); + } + catch (NumberFormatException nfe) { + // IGNORE + } + if (addr == null) { + try { + Long lval = Long.decode("0x" + sval); + addr = selectedObject.getModel().getAddress("ram", lval); + } + catch (NumberFormatException nfe) { + // IGNORE + } + } + return addr; + } } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTree.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTree.java index f0043d763d..2ae758b57f 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTree.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/components/ObjectTree.java @@ -426,6 +426,10 @@ public class ObjectTree implements ObjectPane { Long lval = (Long) value; addr = selectedObject.getModel().getAddress("ram", lval); } + if (value instanceof String) { + String sval = (String) value; + addr = stringToAddress(selectedObject, addr, sval); + } if (modelService != null && addr != null) { TraceRecorder recorder = modelService.getRecorderForSuccessor(selectedObject); DebuggerMemoryMapper memoryMapper = recorder.getMemoryMapper(); @@ -434,4 +438,24 @@ public class ObjectTree implements ObjectPane { } } } + + private Address stringToAddress(TargetObject selectedObject, Address addr, String sval) { + try { + Long lval = Long.decode(sval); + addr = selectedObject.getModel().getAddress("ram", lval); + } + catch (NumberFormatException nfe) { + // IGNORE + } + if (addr == null) { + try { + Long lval = Long.decode("0x" + sval); + addr = selectedObject.getModel().getAddress("ram", lval); + } + catch (NumberFormatException nfe) { + // IGNORE + } + } + return addr; + } }