1#include <sys/ptrace.h> 2#include <stdarg.h> 3#include <unistd.h> 4#include "syscall.h" 5 6long ptrace(int req, ...) 7{ 8 va_list ap; 9 pid_t pid; 10 void *addr, *data, *addr2; 11 long ret, result; 12 13 va_start(ap, req); 14 pid = va_arg(ap, pid_t); 15 addr = va_arg(ap, void *); 16 data = va_arg(ap, void *); 17 addr2 = va_arg(ap, void *); 18 va_end(ap); 19 20 if (req-1U < 3) data = &result; 21 ret = syscall(SYS_ptrace, req, pid, addr, data, addr2); 22 23 if (ret < 0 || req-1U >= 3) return ret; 24 return result; 25} 26