diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/DbgModule.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/DbgModule.java index fce5472a8b..a6884da2e2 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/DbgModule.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/DbgModule.java @@ -26,6 +26,8 @@ public interface DbgModule { String getImageName(); + String getModuleName(); + Long getKnownBase(); Integer getSize(); diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgModuleImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgModuleImpl.java index b2357d4b25..9709193449 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgModuleImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgModuleImpl.java @@ -72,6 +72,11 @@ public class DbgModuleImpl implements DbgModule { return info == null ? getName() : info.imageName; } + @Override + public String getModuleName() { + return info == null ? getName() : info.moduleName; + } + @Override public Long getKnownBase() { return info == null ? 0L : info.baseOffset; diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetModule.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetModule.java index 24e726000c..9aae249837 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetModule.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetModule.java @@ -43,6 +43,11 @@ public interface DbgModelTargetModule extends // : nameAttr.getCachedAttribute(VALUE_ATTRIBUTE_NAME).toString(); String sizestr = size == null ? "1" : size.getCachedAttribute(VALUE_ATTRIBUTE_NAME).toString(); + String shortnamestr = namestr; + int sep = shortnamestr.lastIndexOf('\\'); + if (sep > 0 && sep < shortnamestr.length()) { + shortnamestr = shortnamestr.substring(sep + 1); + } Long base = Long.parseUnsignedLong(basestr, 16); Integer sz = Integer.parseInt(sizestr, 16); Address min = space.getAddress(base); @@ -52,8 +57,9 @@ public interface DbgModelTargetModule extends // String oldval = (String) getCachedAttribute(DISPLAY_ATTRIBUTE_NAME); map.put(MODULE_NAME_ATTRIBUTE_NAME, namestr); - map.put(DISPLAY_ATTRIBUTE_NAME, namestr); - setModified(map, !namestr.equals(oldval)); + map.put(SHORT_DISPLAY_ATTRIBUTE_NAME, shortnamestr); + map.put(DISPLAY_ATTRIBUTE_NAME, shortnamestr); + setModified(map, !shortnamestr.equals(oldval)); } }); } diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetModuleImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetModuleImpl.java index d1aaddc2a3..59ae3a746d 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetModuleImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetModuleImpl.java @@ -65,7 +65,8 @@ public class DbgModelTargetModuleImpl extends DbgModelTargetObjectImpl // sections.getName(), sections, // ), Map.of( // DISPLAY_ATTRIBUTE_NAME, getIndex(), // - MODULE_NAME_ATTRIBUTE_NAME, module.getName(), // + SHORT_DISPLAY_ATTRIBUTE_NAME, module.getName(), // + MODULE_NAME_ATTRIBUTE_NAME, module.getImageName(), // "BaseAddress", space.getAddress(module.getKnownBase()), // "ImageName", module.getImageName(), // "TimeStamp", module.getTimeStamp(), // diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetModule.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetModule.java index b5caeef4e9..23db7cc4e6 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetModule.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetModule.java @@ -29,14 +29,17 @@ import ghidra.dbg.util.PathUtils; import ghidra.program.model.address.*; import ghidra.util.Msg; -@TargetObjectSchemaInfo(name = "Module", elements = { - @TargetElementType(type = Void.class) }, attributes = { - @TargetAttributeType(type = Void.class) }) +@TargetObjectSchemaInfo(name = "Module", elements = { // + @TargetElementType(type = Void.class) // +}, attributes = { // + @TargetAttributeType(type = Void.class) // +}) public class GdbModelTargetModule extends DefaultTargetObject implements TargetModule { public static final String VISIBLE_RANGE_ATTRIBUTE_NAME = "range"; + public static final String VISIBLE_MODULE_NAME_ATTRIBUTE_NAME = "module name"; protected static String indexModule(GdbModule module) { return module.getName(); @@ -66,11 +69,15 @@ public class GdbModelTargetModule this.symbols = new GdbModelTargetSymbolContainer(this); range = doGetRange(); // Likely [0,0] - changeAttributes(List.of(), List.of(sections, symbols), - Map.of(VISIBLE_RANGE_ATTRIBUTE_NAME, range, RANGE_ATTRIBUTE_NAME, range, - MODULE_NAME_ATTRIBUTE_NAME, module.getName(), UPDATE_MODE_ATTRIBUTE_NAME, - TargetUpdateMode.FIXED, DISPLAY_ATTRIBUTE_NAME, module.getName()), - "Initialized"); + changeAttributes(List.of(), List.of(sections, symbols), Map.of( // + VISIBLE_RANGE_ATTRIBUTE_NAME, range, // + VISIBLE_MODULE_NAME_ATTRIBUTE_NAME, module.getName(), // + RANGE_ATTRIBUTE_NAME, range, // + MODULE_NAME_ATTRIBUTE_NAME, module.getName(), // + UPDATE_MODE_ATTRIBUTE_NAME, TargetUpdateMode.FIXED, // + SHORT_DISPLAY_ATTRIBUTE_NAME, getDisplay(), // + DISPLAY_ATTRIBUTE_NAME, getDisplay() // + ), "Initialized"); } public CompletableFuture init() { @@ -92,7 +99,12 @@ public class GdbModelTargetModule @Override public String getDisplay() { - return module.getName(); + String shortName = module.getName(); + int sep = shortName.lastIndexOf('/'); + if (sep > 0 && sep < shortName.length()) { + shortName = shortName.substring(sep + 1); + } + return shortName; } protected AddressRange doGetRange() { @@ -124,4 +136,10 @@ public class GdbModelTargetModule public AddressRange getVisibleRange() { return range; } + + @TargetAttributeType(name = VISIBLE_MODULE_NAME_ATTRIBUTE_NAME) + public String getVisibleModuleName() { + return module.getName(); + } + } diff --git a/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetReferenceType.java b/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetReferenceType.java index 900aa2f597..34757a048d 100644 --- a/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetReferenceType.java +++ b/Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/model/JdiModelTargetReferenceType.java @@ -74,6 +74,7 @@ public class JdiModelTargetReferenceType extends JdiModelTargetType implements / Address zero = impl.getAddressSpace("ram").getAddress(0L); changeAttributes(List.of(), List.of(), Map.of( // DISPLAY_ATTRIBUTE_NAME, reftype.name(), // + SHORT_DISPLAY_ATTRIBUTE_NAME, reftype.name(), // RANGE_ATTRIBUTE_NAME, new AddressRangeImpl(zero, zero), // MODULE_NAME_ATTRIBUTE_NAME, reftype.name(), // UPDATE_MODE_ATTRIBUTE_NAME, TargetUpdateMode.FIXED // diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java index bd4ddf703c..e858282426 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java @@ -73,6 +73,7 @@ public class DebuggerModulesProvider extends ComponentProviderAdapter { implements EnumeratedTableColumn { BASE("Base Address", Address.class, ModuleRow::getBase), MAX("Max Address", Address.class, ModuleRow::getMaxAddress), + SHORT_NAME("Name", String.class, ModuleRow::getShortName), NAME("Module Name", String.class, ModuleRow::getName, ModuleRow::setName), LIFESPAN("Lifespan", Range.class, ModuleRow::getLifespan), LENGTH("Length", Long.class, ModuleRow::getLength); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java index 49eaaacdc5..8ac71b20f3 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/ModuleRow.java @@ -39,6 +39,19 @@ public class ModuleRow { } } + public String getShortName() { + String name = module.getName(); + int sep = name.lastIndexOf('\\'); + if (sep > 0 && sep < name.length()) { + name = name.substring(sep + 1); + } + sep = name.lastIndexOf('/'); + if (sep > 0 && sep < name.length()) { + name = name.substring(sep + 1); + } + return name; + } + public String getName() { return module.getName(); }