diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgLaunchProcessCommand.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgLaunchProcessCommand.java index b1bc17a97b..d680393891 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgLaunchProcessCommand.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/cmd/DbgLaunchProcessCommand.java @@ -95,7 +95,7 @@ public class DbgLaunchProcessCommand extends AbstractDbgCommand { } private String fixPath(String input) { - if (input.equals("")) { + if (input == null || input.equals("")) { return null; } String output = input; diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetRegisterBank.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetRegisterBank.java index f7f3a37b68..10dd9a8938 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetRegisterBank.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/iface2/DbgModelTargetRegisterBank.java @@ -21,7 +21,7 @@ import java.util.Map.Entry; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; -import agent.dbgeng.manager.DbgThread; +import agent.dbgeng.manager.*; import agent.dbgeng.manager.impl.*; import ghidra.async.AsyncUtils; import ghidra.async.TypeSpec; @@ -101,6 +101,7 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target } public default CompletableFuture doWriteRegistersNamed(Map values) { + DbgManagerImpl manager = getManager(); DbgThread thread = getParentThread().getThread(); return AsyncUtils.sequence(TypeSpec.VOID).then(seq -> { requestNativeElements().handle(seq::nextIgnore); @@ -122,6 +123,8 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target getParentThread().getThread().writeRegisters(toWrite).handle(seq::next); // TODO: Should probably filter only effective and normalized writes in the callback }).then(seq -> { + manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(), + DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE); broadcast().registersUpdated(getProxy(), values); seq.exit(); }).finish(); 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 f1fb8887f4..7ff2e5742f 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 @@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import agent.dbgeng.manager.*; +import agent.dbgeng.manager.impl.DbgManagerImpl; import agent.dbgeng.manager.impl.DbgRegister; import agent.dbgeng.model.iface2.*; import ghidra.async.AsyncUtils; @@ -141,6 +142,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp @Override public CompletableFuture writeRegistersNamed(Map values) { + DbgManagerImpl manager = getManager(); return model.gateFuture(thread.listRegisters().thenCompose(regs -> { return requestElements(false); }).thenCompose(__ -> { @@ -159,6 +161,8 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp return thread.writeRegisters(toWrite); // TODO: Should probably filter only effective and normalized writes in the callback }).thenAccept(__ -> { + manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(), + DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE); broadcast().registersUpdated(getProxy(), values); })); }