|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)ptrace.2 6.4 (Berkeley) 5/23/86
6: .\"
7: .TH PTRACE 2 "May 23, 1986"
8: .UC 4
9: .SH NAME
10: ptrace \- process trace
11: .SH SYNOPSIS
12: .nf
13: .ft B
14: #include <sys/signal.h>
15: #include <sys/ptrace.h>
16: .PP
17: .ft B
18: ptrace(request, pid, addr, data)
19: int request, pid, *addr, data;
20: .fi
21: .SH DESCRIPTION
22: .I Ptrace
23: provides a means by which a parent process
24: may control the execution of a child process,
25: and examine and change its core image.
26: Its primary use is for the implementation of breakpoint debugging.
27: There are four arguments whose interpretation
28: depends on a
29: .I request
30: argument.
31: Generally,
32: .I pid
33: is the process ID of the traced process,
34: which must be a child (no more distant descendant)
35: of the tracing process.
36: A process being traced
37: behaves normally until it encounters some signal
38: whether internally generated
39: like \*(lqillegal instruction\*(rq or externally
40: generated like \*(lqinterrupt\*(rq.
41: See
42: .IR sigvec (2)
43: for the list.
44: Then the traced process enters a stopped state
45: and its parent is notified via
46: .IR wait (2).
47: When the child is in the stopped state,
48: its core image can be examined and modified
49: using
50: .IR ptrace .
51: If desired, another
52: .I ptrace
53: request can then cause the child either to terminate
54: or to continue, possibly ignoring the signal.
55: .PP
56: The value of the
57: .I request
58: argument determines the precise
59: action of the call:
60: .TP 4
61: PT_TRACE_ME
62: This request is the only one used by the child process;
63: it declares that the process is to be traced by its parent.
64: All the other arguments are ignored.
65: Peculiar results will ensue
66: if the parent does not expect to trace the child.
67: .TP 4
68: PT_READ_I, PT_READ_D
69: The
70: word in the child process's address space
71: at
72: .I addr
73: is returned.
74: If I and D space are separated (e.g. historically
75: on a pdp-11), request PT_READ_I indicates I space,
76: PT_READ_D D space.
77: .I Addr
78: must be even on some machines.
79: The child must be stopped.
80: The input
81: .I data
82: is ignored.
83: .TP 4
84: PT_READ_U
85: The word
86: of the system's per-process data area corresponding to
87: .I addr
88: is returned.
89: .I Addr
90: must be even on some machines and less than 512.
91: This space contains the registers and other information about
92: the process;
93: its layout corresponds to the
94: .I user
95: structure in the system.
96: .TP 4
97: PT_WRITE_I, PT_WRITE_D
98: The
99: given
100: .I data
101: is written at the word in the process's address space corresponding to
102: .I addr,
103: which must be even on some machines.
104: No useful value is returned.
105: If I and D space are separated, request PT_WRITE_I indicates I space,
106: PT_WRITE_D D space.
107: Attempts to write in pure procedure
108: fail if another process is executing the same file.
109: .TP 4
110: PT_WRITE_U
111: The process's system data is written,
112: as it is read with request PT_READ_U.
113: Only a few locations can be written in this way:
114: the general registers,
115: the floating point status and registers,
116: and certain bits of the processor status word.
117: .TP 4
118: PT_CONTINUE
119: The
120: .I data
121: argument is taken as a signal number
122: and the child's execution continues
123: at location
124: .I addr
125: as if it had incurred that signal.
126: Normally the signal number will be
127: either 0 to indicate that the signal that caused the stop
128: should be ignored,
129: or that value fetched out of the
130: process's image indicating which signal caused
131: the stop.
132: If
133: .I addr
134: is (int *)1 then execution continues from where it stopped.
135: .TP 4
136: PT_KILL
137: The traced process terminates.
138: .TP 4
139: PT_STEP
140: Execution continues as in request PT_CONTINUE;
141: however, as soon as possible after execution of at least one instruction,
142: execution stops again.
143: The signal number from the stop is
144: SIGTRAP.
145: (On the VAX-11 the T-bit is used and just one instruction
146: is executed.)
147: This is part of the mechanism for implementing breakpoints.
148: .PP
149: As indicated,
150: these calls
151: (except for request PT_TRACE_ME)
152: can be used only when the subject process has stopped.
153: The
154: .I wait
155: call is used to determine
156: when a process stops;
157: in such a case the \*(lqtermination\*(rq status
158: returned by
159: .I wait
160: has the value 0177 to indicate stoppage rather
161: than genuine termination.
162: .PP
163: To forestall possible fraud,
164: .I ptrace
165: inhibits the set-user-id and set-group-id facilities
166: on subsequent
167: .IR execve (2)
168: calls.
169: If a traced process calls
170: .IR execve ,
171: it will stop before executing the first instruction of the new image
172: showing signal SIGTRAP.
173: .PP
174: On a VAX-11, \*(lqword\*(rq also means a 32-bit integer,
175: but the \*(lqeven\*(rq
176: restriction does not apply.
177: .SH "RETURN VALUE
178: A 0 value is returned if the call succeeds. If the call fails
179: then a \-1 is returned and the global variable \fIerrno\fP is
180: set to indicate the error.
181: .SH "ERRORS
182: .TP 15
183: [EIO]
184: The request code is invalid.
185: .TP 15
186: [ESRCH]
187: The specified process does not exist.
188: .TP 15
189: [EIO]
190: The given signal number is invalid.
191: .TP 15
192: [EIO]
193: The specified address is out of bounds.
194: .TP 15
195: [EPERM]
196: The specified process cannot be traced.
197: .SH "SEE ALSO"
198: wait(2), sigvec(2), adb(1)
199: .SH BUGS
200: .I Ptrace
201: is unique and arcane; it should be replaced with a special file that
202: can be opened and read and written. The control functions could then
203: be implemented with
204: .IR ioctl (2)
205: calls on this file. This would be simpler to understand and have much
206: higher performance.
207: .PP
208: The request PT_TRACE_ME call should be able to specify
209: signals that are to be treated normally and not cause a stop.
210: In this way, for example,
211: programs with simulated floating point (which
212: use \*(lqillegal instruction\*(rq signals at a very high rate)
213: could be efficiently debugged.
214: .PP
215: The error indication, \-1, is a legitimate function value;
216: .I errno,
217: (see
218: .IR intro (2)),
219: can be used to disambiguate.
220: .PP
221: It should be possible to stop a process on occurrence of a system
222: call;
223: in this way a completely controlled environment could
224: be provided.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.