From 29fe88b81192bc94e3d6ef0518850a75bf652d12 Mon Sep 17 00:00:00 2001 From: d-millar <33498836+d-millar@users.noreply.github.com> Date: Mon, 4 Jan 2021 23:09:39 +0000 Subject: [PATCH] bug fix: process removed after .kill or q from console --- .../dbgeng/manager/impl/DbgDebugEventCallbacksAdapter.java | 6 +++++- .../agent/dbgeng/model/impl/DbgModelTargetProcessImpl.java | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgDebugEventCallbacksAdapter.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgDebugEventCallbacksAdapter.java index e26199ee9b..4bcb83f365 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgDebugEventCallbacksAdapter.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/manager/impl/DbgDebugEventCallbacksAdapter.java @@ -100,7 +100,11 @@ public class DbgDebugEventCallbacksAdapter extends DebugEventCallbacksAdapter { if (DebugStatus.isInsideWait(argument)) { return DebugStatus.NO_CHANGE; } - Msg.info(this, "***ExecutionStatus: " + DebugStatus.fromArgument(argument)); + DebugStatus status = DebugStatus.fromArgument(argument); + Msg.info(this, "***ExecutionStatus: " + status); + if (status.equals(DebugStatus.NO_DEBUGGEE)) { + event.setState(DbgState.EXIT); + } return manager.processEvent(event); } if (flags.contains(ChangeEngineState.BREAKPOINTS)) { diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetProcessImpl.java b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetProcessImpl.java index f6b4ad33c4..3a93df84e0 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetProcessImpl.java +++ b/Ghidra/Debug/Debugger-agent-dbgeng/src/main/java/agent/dbgeng/model/impl/DbgModelTargetProcessImpl.java @@ -196,6 +196,13 @@ public class DbgModelTargetProcessImpl extends DbgModelTargetObjectImpl setExecutionState(TargetExecutionState.TERMINATED, "Exited"); } + @Override + public void onExit() { + super.onExit(); + DbgModelTargetProcessContainer processes = (DbgModelTargetProcessContainer) getImplParent(); + processes.processRemoved(process.getId(), DbgCause.Causes.UNCLAIMED); + } + @Override public CompletableFuture select() { DbgManagerImpl manager = getManager();