1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: #include <errno.h>
20: #include <sys/ptrace.h>
21: #include <sys/types.h>
22: #include <stdarg.h>
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33: int
34: ptrace (request)
35: enum __ptrace_request request;
36: {
37: pid_t pid;
38: void *addr;
39: void *addr2;
40: int data;
41: va_list ap;
42:
43: switch (request)
44: {
45: case PTRACE_TRACEME:
46: case PTRACE_CONT:
47: case PTRACE_KILL:
48: case PTRACE_SINGLESTEP:
49: case PTRACE_ATTACH:
50: case PTRACE_DETACH:
51: break;
52:
53: case PTRACE_PEEKTEXT:
54: case PTRACE_PEEKDATA:
55: case PTRACE_PEEKUSER:
56: case PTRACE_GETREGS:
57: case PTRACE_SETREGS:
58: #ifdef PTRACE_GETFPREGS
59: case PTRACE_GETFPGEGS:
60: #endif
61: case PTRACE_SETFPREGS:
62: case PTRACE_GETFPAREGS:
63: case PTRACE_SETFPAREGS:
64: va_start(ap, request);
65: pid = va_arg(ap, pid_t);
66: addr = va_arg(ap, void *);
67: va_end(ap);
68: break;
69:
70: case PTRACE_POKETEXT:
71: case PTRACE_POKEDATA:
72: case PTRACE_POKEUSER:
73: va_start(ap, request);
74: pid = va_arg(ap, pid_t);
75: addr = va_arg(ap, void *);
76: data = va_arg(ap, int);
77: va_end(ap);
78: break;
79:
80: case PTRACE_READDATA:
81: case PTRACE_WRITEDATA:
82: case PTRACE_READTEXT:
83: case PTRACE_WRITETEXT:
84: va_start(ap, request);
85: pid = va_arg(ap, pid_t);
86: addr = va_arg(ap, void *);
87: data = va_arg(ap, int);
88: addr2 = va_arg(ap, void *);
89: va_end(ap);
90: break;
91:
92: default:
93: __set_errno (EINVAL);
94: return -1;
95: }
96:
97: __set_errno (ENOSYS);
98: return -1;
99: }
100:
101:
102: stub_warning (ptrace)
103: #include <stub-tag.h>