PTRACE.2
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:6k
源码类别:

操作系统开发

开发平台:

C/C++

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