From fc115e715ea77735693947da35d04e6c2ed93235 Mon Sep 17 00:00:00 2001 From: d-millar <33498836+d-millar@users.noreply.github.com> Date: Thu, 23 Sep 2021 19:20:46 +0000 Subject: [PATCH] GP-1288: added arbitrary excs --- .../cmd/DbgListExceptionFiltersCommand.java | 18 ++++++++++++++++++ .../gui/objects/DebuggerObjectsProvider.java | 15 ++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgListExceptionFiltersCommand.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgListExceptionFiltersCommand.java index 0fe8c61f0b..047943fb4b 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgListExceptionFiltersCommand.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgListExceptionFiltersCommand.java @@ -44,6 +44,7 @@ public class DbgListExceptionFiltersCommand DebugFilterInformation info = control.getNumberEventFilters(); int nEvents = info.getNumberEvents(); int nExcs = info.getNumberSpecificExceptions(); + int nExcsA = info.getNumberArbitraryExceptions(); DebugExceptionFilterInformation exc = control.getExceptionFilterParameters(nEvents, null, nExcs); for (int i = 0; i < exc.getParameters().length; i++) { @@ -57,5 +58,22 @@ public class DbgListExceptionFiltersCommand p.ExceptionCode.longValue()); result.add(filter); } + if (nExcsA > 0) { + DebugExceptionFilterInformation excA = + control.getExceptionFilterParameters(nEvents + nExcs, null, nExcsA); + for (int i = 0; i < excA.getParameters().length; i++) { + DEBUG_EXCEPTION_FILTER_PARAMETERS p = excA.getParameter(i); + String text = Long.toHexString(p.ExceptionCode.longValue()); + // control.getEventFilterText(nEvents + nExcs + i, p.TextSize.intValue()); + String cmd = + control.getEventFilterCommand(nEvents + nExcs + i, p.CommandSize.intValue()); + String cmd2 = control.getExceptionFilterSecondCommand(nEvents + nExcs + i, + p.SecondCommandSize.intValue()); + DbgExceptionFilterImpl filter = new DbgExceptionFilterImpl(i, text, cmd, cmd2, + p.ExecutionOption.intValue(), p.ContinueOption.intValue(), + p.ExceptionCode.longValue()); + result.add(filter); + } + } } } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java index b111e37163..5d4dd9612e 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/objects/DebuggerObjectsProvider.java @@ -54,6 +54,7 @@ import ghidra.dbg.target.*; import ghidra.dbg.target.TargetConsole.Channel; import ghidra.dbg.target.TargetExecutionStateful.TargetExecutionState; import ghidra.dbg.target.TargetLauncher.TargetCmdLineLauncher; +import ghidra.dbg.target.TargetMethod.ParameterDescription; import ghidra.dbg.target.TargetSteppable.TargetStepKind; import ghidra.dbg.util.DebuggerCallbackReorderer; import ghidra.dbg.util.PathUtils; @@ -1193,7 +1194,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter .keyBinding("F3") .toolBarGroup(DebuggerResources.GROUP_CONTROL, "C" + groupTargetIndex) .toolBarIcon(AbstractSetBreakpointAction.ICON) - .popupMenuPath("&AddBreakpoint") + .popupMenuPath("&Add Breakpoint") .popupMenuGroup(DebuggerResources.GROUP_CONTROL, "C" + groupTargetIndex) .popupMenuIcon(AbstractSetBreakpointAction.ICON) .helpLocation(AbstractSetBreakpointAction.help(plugin)) @@ -1526,10 +1527,14 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter public void performConfigure(ActionContext context) { performAction(context, false, TargetConfigurable.class, configurable -> { - Map args = configDialog.promptArguments(configurable.getConfigParameters()); - if (args != null) { - for (Entry entry : args.entrySet()) { - configurable.writeConfigurationOption(entry.getKey(), entry.getValue()); + Map> configParameters = + configurable.getConfigParameters(); + if (configParameters.size() > 0) { + Map args = configDialog.promptArguments(configParameters); + if (args != null) { + for (Entry entry : args.entrySet()) { + configurable.writeConfigurationOption(entry.getKey(), entry.getValue()); + } } } return AsyncUtils.NIL;