From f33d94d421d8aeb6cd6ef5d50765b083363d589e Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Mon, 3 May 2021 09:33:42 -0400 Subject: [PATCH] GP-0: Protecting from errors in broken opinions. Fixing ARM opinion. --- .../core/debug/mapping/DebuggerMappingOpinion.java | 13 +++++++++++-- .../platform/GdbArmDebuggerMappingOpinion.java | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/mapping/DebuggerMappingOpinion.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/mapping/DebuggerMappingOpinion.java index 3b642aa007..6459107cd7 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/mapping/DebuggerMappingOpinion.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/mapping/DebuggerMappingOpinion.java @@ -19,6 +19,7 @@ import java.util.*; import ghidra.dbg.DebuggerObjectModel; import ghidra.dbg.target.*; +import ghidra.util.Msg; import ghidra.util.classfinder.ClassSearcher; import ghidra.util.classfinder.ExtensionPoint; @@ -29,6 +30,7 @@ public interface DebuggerMappingOpinion extends ExtensionPoint { /** * Query all known opinions for recording/tracing a debug session * + *

* The returned offers are ordered highest-confidence first. * * @param target the target to be recorded, usually a process @@ -38,8 +40,15 @@ public interface DebuggerMappingOpinion extends ExtensionPoint { List result = new ArrayList<>(); for (DebuggerMappingOpinion opinion : ClassSearcher .getInstances(DebuggerMappingOpinion.class)) { - synchronized (result) { - result.addAll(opinion.getOffers(target)); + try { + Set offers = opinion.getOffers(target); + synchronized (result) { + result.addAll(offers); + } + } + catch (Throwable t) { + Msg.error(DebuggerMappingOpinion.class, + "Problem querying opinion " + opinion + " for recording/mapping offers"); } } result.sort(HIGHEST_CONFIDENCE_FIRST); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/GdbArmDebuggerMappingOpinion.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/GdbArmDebuggerMappingOpinion.java index 0d771e55d5..010cffb3b7 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/GdbArmDebuggerMappingOpinion.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/GdbArmDebuggerMappingOpinion.java @@ -45,7 +45,11 @@ public class GdbArmDebuggerMappingOpinion implements DebuggerMappingOpinion { } } + @Override public Set offersForEnv(TargetEnvironment env, TargetProcess process) { + if (env == null) { + return Set.of(); + } if (!env.getDebugger().toLowerCase().contains("gdb")) { return Set.of(); }