根据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/

10-13 07:40