我想在運行時跟蹤的程序:用ptrace(PTRACE_ATTACH, ...)
,ptrace(PTRACE_SINGLESTEP, ...)
等。ptrace_detach,SIGINT和跟蹤/斷點陷阱(核心轉儲)
一切似乎都很正常,但是當我退出我的跟蹤程序爲CTRL-C,我想從跟蹤的程序中分離它(當與PTRACE_DETACH
),並且當我執行此操作時,跟蹤的程序崩潰,並顯示錯誤Trace/BPT trap (core dumped)
。
我的問題是:如何正確分離而不使被跟蹤的程序崩潰?
這裏是捕捉SIGINT
信號的功能:
void sig_int()
{
if (ptrace(PTRACE_DETACH, pid, NULL, NULL) == -1)
my_perror("ptrace/DETACH", strerror(errno));
}
編輯:
下面是一些其他代碼:
if ((ptrace(PTRACE_SINGLESTEP, pid, NULL, NULL) == -1))
my_perror("ptrace/SINGLESTEP", strerror(errno));
if (wait4(pid, &(l->status), 0, 0) == -1)
my_perror("wait4", strerror(errno));
if (ptrace(PTRACE_GETREGS, pid, 0, &(l->reg)) == -1)
my_perror("ptrace/GETREGS", strerror(errno));
if ((l->opcode = ptrace(PTRACE_PEEKTEXT, pid, l->reg.rip, NULL)) == -1)
my_perror("ptrace/PEEKTEXT", strerror(errno));
這是我的循環,其中的一部分我做我的追蹤的第一部分
我一直在搜索錯誤的起源,並試圖在分離之前和之後等待被追蹤的程序,但仍然發生相同的錯誤,或者在兩個程序之間存在一個inifite循環。 – Mindhavok