Pseudo Graceful Process Termination Through Code Injection
sigma-star.at
sigma-star.at
tty1$ ./program
tty2$ gdb attach $(ps aux | grep program | head -1 | awk '{ print $2 }')
Attaching to process 708267
[New LWP 708268]
[New LWP 708269]
[New LWP 708270]
[New LWP 708271]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f00b1633117 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) p (long)syscall(231, 0)
[Thread 0x7f00565e6640 (LWP 708271) exited]
[Thread 0x7f005a5e8640 (LWP 708270) exited]
[Thread 0x7f005ade9640 (LWP 708269) exited]
[Thread 0x7f005d5ee640 (LWP 708268) exited]
[Inferior 1 (process 708267) exited normally]
The program being debugged exited while in a function called from GDB.
Evaluation of the expression containing the function
(syscall) will be abandoned.
(gdb) quit
tty1$ echo $?
0I'm still trying to imagine what situation that is. I still cannot think about any real case where this is something you need.
If there is, I guess this is a very rare case? As it was already commented, I guess just gdb then?
But the technical details on how they do it are interesting nevertheless.
Interestingly, Windows does:
https://learn.microsoft.com/en-us/windows/win32/api/processt...