それが実行されている間、私はプログラムをトレースしようとしている: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));
}
EDIT:
ここではいくつかの他のコードです:
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));
これはどこ私のループの一部であります私はトレースの最初の部分を行う
私は、エラーの原因を探し続け、切り離し前後でトレースされたプログラムを待つように試みましたが、同じエラーが発生するか、2つのプログラム間に無限ループがあります。 – Mindhavok