diff --git a/loader/src/ptracer/main.cpp b/loader/src/ptracer/main.cpp index 9deeb4d..010800b 100644 --- a/loader/src/ptracer/main.cpp +++ b/loader/src/ptracer/main.cpp @@ -18,7 +18,11 @@ int main(int argc, char **argv) { return 0; } else if (argc >= 3 && argv[1] == "trace"sv) { auto pid = strtol(argv[2], 0, 0); - return !trace_zygote(pid); + if (!trace_zygote(pid)) { + kill(pid, SIGKILL); + return 1; + } + return 0; } else if (argc >= 3 && argv[1] == "ctl"sv) { if (argv[2] == "start"sv) { send_control_command(START); diff --git a/loader/src/ptracer/ptracer.cpp b/loader/src/ptracer/ptracer.cpp index a6a8cce..55c933c 100644 --- a/loader/src/ptracer/ptracer.cpp +++ b/loader/src/ptracer/ptracer.cpp @@ -74,7 +74,7 @@ bool inject_on_main(int pid, const char *lib_path) { } if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGSEGV) { if (!get_regs(pid, regs)) return false; - if (regs.REG_IP != break_addr) { + if ((regs.REG_IP & ~1) != (break_addr & ~1)) { LOGE("stopped at unknown addr %p", (void *) regs.REG_IP); return false; }