繁体   English   中英

linux kernel 中的 ptrace 在哪里?

[英]Where is ptrace in linux kernel?

我在具有global ptrace的 kernel 源代码中找不到它,在 kernel/ptrace.c 中没有定义,就像在手册页中所述...... h 但是什么都没有

您需要在您的 libc 源代码中查找它,例如glibcmusl 并注意它在NOTES部分下的man ptrace中所说的内容:

虽然 arguments 到 ptrace() 是根据给定的原型解释的,但 glibc 目前将 ptrace() 声明为可变参数 function 仅修复了请求参数。 建议始终提供四个 arguments,即使请求的操作不使用它们,将未使用/忽略的 arguments 设置为 0L 或 (void *) 0。

glibc中,例如ptrace()sysdeps/unix/sysv/linux/ptrace.c中定义:

long int
ptrace (enum __ptrace_request request, ...)
{
  long int res, ret;
  va_list ap;
  pid_t pid;
  void *addr, *data;

  va_start (ap, request);
  pid = va_arg (ap, pid_t);
  addr = va_arg (ap, void *);
  data = va_arg (ap, void *);
  va_end (ap);

  if (request > 0 && request < 4)
    data = &ret;

  res = INLINE_SYSCALL (ptrace, 4, request, pid, addr, data);
  if (res >= 0 && request > 0 && request < 4)
    {
      __set_errno (0);
      return ret;
    }

  return res;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM