Где находится ptrace в ядре Linux? - PullRequest
1 голос
/ 24 сентября 2019

Я не могу найти его в исходном коде ядра с global ptrace, в kernel / ptrace.c нет определения, как это было указано в man-странице ..... Я вижу kernel / ptrace.c и включаю /linux / ptrace.h но ничего нет

1 Ответ

0 голосов
/ 24 сентября 2019

Вам нужно искать его в исходном коде libc, например, glibc или musl .И обратите внимание, что говорится в man ptrace в разделе NOTES:

Хотя аргументы ptrace () интерпретируются в соответствии с заданным прототипом, glibc в настоящее время объявляет ptrace () как функцию с переменным числом сисправлен только аргумент запроса.Рекомендуется всегда указывать четыре аргумента, даже если запрошенная операция их не использует, устанавливая для неиспользуемых / игнорируемых аргументов значение 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;
}
...