根据the ptrace manual page:
当我使用PTRACE_ATTACH
附加到进程时,如何知道该示踪当前是否在syscall中?换句话说,如果我使用PTRACE_SYSCALL
重新启动示踪,如何知道下一个syscall-stop是syscall-enter-stop
还是syscall-exit-stop
?
最佳答案
当跟踪的进程在系统调用ENTRY上停止时,EAX寄存器将包含-ENOSYS,并且orig_rax具有该系统调用的编号。
下面的代码示例演示一个示例。
if (registers.rax == -ENOSYS)
{ switch (registers.orig_rax)
{
case _NR_open: //Example
break;
default:
// to get the arguments
fprintf(stderr, "%#08x, %#08x, %#08x",
registers.rbx, registers.rcx,
registers.rdx);
break;
}
}
else
{
if (registers.rax < 0)
{
// error condition
fprintf(stderr, "#Err: %s\n",
errors[abs(registers.rax)]);
}
else
{
// return code
fprintf(stderr, "%#08x\n", registers.rax);
}
}
关于c - 附加到进程后,如何检查Tracee是否在syscall中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52056385/