From 78a84772e46bec40e7dd0272142f866216f19836 Mon Sep 17 00:00:00 2001 From: 3rdit Date: Thu, 16 Apr 2026 01:39:33 +0100 Subject: [PATCH] set PTRACE_O_EXITKILL and also cleanup --- src/cross/ElfBug/ElfBug/api/elfbug_api.cpp | 4 ++++ .../ElfBug/ElfBug/core/Debugger.Loop.Signal.cpp | 17 +++-------------- src/cross/ElfBug/ElfBug/core/Debugger.Loop.cpp | 3 ++- src/cross/ElfBug/ElfBug/core/Debugger.cpp | 1 + 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/cross/ElfBug/ElfBug/api/elfbug_api.cpp b/src/cross/ElfBug/ElfBug/api/elfbug_api.cpp index 82052c79a..031553253 100644 --- a/src/cross/ElfBug/ElfBug/api/elfbug_api.cpp +++ b/src/cross/ElfBug/ElfBug/api/elfbug_api.cpp @@ -53,7 +53,11 @@ struct ElfBugDebugger : ElfBug::Debugger snprintf(path, sizeof(path), "/proc/%d/maps", mProcess->pid); FILE* f = fopen(path, "r"); if(!f) + { + std::lock_guard lock(mapMutex); + memoryMap.clear(); return; + } char line[512]; while(fgets(line, sizeof(line), f)) diff --git a/src/cross/ElfBug/ElfBug/core/Debugger.Loop.Signal.cpp b/src/cross/ElfBug/ElfBug/core/Debugger.Loop.Signal.cpp index ede19551f..4102d881e 100644 --- a/src/cross/ElfBug/ElfBug/core/Debugger.Loop.Signal.cpp +++ b/src/cross/ElfBug/ElfBug/core/Debugger.Loop.Signal.cpp @@ -74,7 +74,9 @@ namespace ElfBug else { cbExceptionEvent(sig, faultAddr); - ptrace(PTRACE_CONT, pid, nullptr, reinterpret_cast(static_cast(sig))); + if(ptrace(PTRACE_CONT, pid, nullptr, + reinterpret_cast(static_cast(sig))) == -1) + cbInternalError("PTRACE_CONT failed: " + std::string(strerror(errno))); } break; } @@ -89,19 +91,6 @@ namespace ElfBug { case PTRACE_EVENT_EXEC: { - if(!mSystemBreakpointHit) - { - mSystemBreakpointHit = true; - if(mThread) - { - mThread->registers.Read(); - beginPause(); - cbSystemBreakpoint(); - if(!pauseAndResume(pid)) - break; - } - break; - } if(ptrace(PTRACE_CONT, pid, nullptr, nullptr) == -1) cbInternalError("PTRACE_CONT failed: " + std::string(strerror(errno))); break; diff --git a/src/cross/ElfBug/ElfBug/core/Debugger.Loop.cpp b/src/cross/ElfBug/ElfBug/core/Debugger.Loop.cpp index e4ddaad02..ff056ecbc 100644 --- a/src/cross/ElfBug/ElfBug/core/Debugger.Loop.cpp +++ b/src/cross/ElfBug/ElfBug/core/Debugger.Loop.cpp @@ -83,7 +83,8 @@ namespace ElfBug PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXEC | - PTRACE_O_TRACEEXIT) == -1) + PTRACE_O_TRACEEXIT | + PTRACE_O_EXITKILL) == -1) { cbInternalError("PTRACE_SETOPTIONS failed: " + std::string(strerror(errno))); mIsRunning.store(false, std::memory_order_release); diff --git a/src/cross/ElfBug/ElfBug/core/Debugger.cpp b/src/cross/ElfBug/ElfBug/core/Debugger.cpp index dd023ea94..bd9d1957e 100644 --- a/src/cross/ElfBug/ElfBug/core/Debugger.cpp +++ b/src/cross/ElfBug/ElfBug/core/Debugger.cpp @@ -201,6 +201,7 @@ namespace ElfBug void Debugger::Detach() { // TODO: implement ptrace detach + cbInternalError("Detach not implemented"); } void Debugger::cbCreateProcessEvent(const pid_t pid, const ptr entryPoint) { (void)pid; (void)entryPoint; }