Вам нужно искать его в исходном коде 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;
}