| #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; | |
| } |