#include <sys/ptrace.h> | |
#include <stdarg.h> | |
#include <unistd.h> | |
#include "syscall.h" | |
long ptrace(int req, ...) { | |
va_list ap; | |
pid_t pid; | |
void *addr, *data, *addr2; | |
long ret, result; | |
va_start(ap, req); | |
pid = va_arg(ap, pid_t); | |
addr = va_arg(ap, void*); | |
data = va_arg(ap, void*); | |
addr2 = va_arg(ap, void*); | |
va_end(ap); | |
if (req - 1U < 3) | |
data = &result; | |
ret = syscall(SYS_ptrace, req, pid, addr, data, addr2); | |
if (ret < 0 || req - 1U >= 3) | |
return ret; | |
return result; | |
} |