gpt4 book ai didi

c - 附加到进程后,如何检查tracee是否在系统调用中?

转载 作者:IT王子 更新时间:2023-10-29 01:00:10 25 4
gpt4 key购买 nike

根据 the ptrace manual page :

Syscall-enter-stop and syscall-exit-stop are indistinguishable from each other by the tracer. The tracer needs to keep track of the sequence of ptrace-stops in order to not misinterpret syscall-enter- stop as syscall-exit-stop or vice versa.

当我使用 PTRACE_ATTACH 附加到一个进程时,我如何知道被跟踪对象当前是否在系统调用中?换句话说,如果我使用 PTRACE_SYSCALL 重新启动 tracee,我如何知道下一个 syscall-stop 是 syscall-enter-stop 还是 syscall-exit -停止?

最佳答案

当跟踪进程在系统调用 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是否在系统调用中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com