183 lines
5.4 KiB
Groff
183 lines
5.4 KiB
Groff
.\" $OpenBSD: ptrace.2,v 1.3 1996/10/08 01:20:12 michaels Exp $
|
|
.\" $NetBSD: ptrace.2,v 1.3 1996/02/23 01:39:41 jtc Exp $
|
|
.\"
|
|
.\" This file is in the public domain.
|
|
.Dd March 25, 2015
|
|
.Dt PTRACE 2
|
|
.Os
|
|
.Sh NAME
|
|
.Nm ptrace
|
|
.Nd process tracing and debugging
|
|
.Sh SYNOPSIS
|
|
.Fd #include <sys/types.h>
|
|
.Fd #include <sys/ptrace.h>
|
|
.Ft int
|
|
.Fn ptrace "int request" "pid_t pid" "caddr_t addr" "int data"
|
|
.Sh DESCRIPTION
|
|
.Fn ptrace
|
|
provides tracing and debugging facilities. It allows one process (the
|
|
.Em tracing
|
|
process) to control another (the
|
|
.Em traced
|
|
process). Most of the time, the traced process runs normally, but when
|
|
it receives a signal
|
|
.Po
|
|
see
|
|
.Xr sigaction 2
|
|
.Pc ,
|
|
it stops. The tracing process is expected to notice this via
|
|
.Xr wait 2
|
|
or the delivery of a
|
|
.Dv SIGCHLD
|
|
signal, examine the state of the stopped process, and cause it to
|
|
terminate or continue as appropriate.
|
|
.Fn ptrace
|
|
is the mechanism by which all this happens.
|
|
.Pp
|
|
The
|
|
.Fa request
|
|
argument specifies what operation is being performed; the meaning of
|
|
the rest of the arguments depends on the operation, but except for one
|
|
special case noted below, all
|
|
.Fn ptrace
|
|
calls are made by the tracing process, and the
|
|
.Fa pid
|
|
argument specifies the process ID of the traced process.
|
|
.Fa request
|
|
can be:
|
|
.Bl -tag -width 12n
|
|
.It Dv PT_TRACE_ME
|
|
This request is one of two used by the traced process; it declares
|
|
that the process expects to be traced by its parent. All the other
|
|
arguments are ignored. (If the parent process does not expect to trace
|
|
the child, it will probably be rather confused by the results; once the
|
|
traced process stops, it cannot be made to continue except via
|
|
.Eo \&
|
|
.Fn ptrace
|
|
.Ec \&.)
|
|
When a process has used this request and calls
|
|
.Xr execve 2
|
|
or any of the routines built on it
|
|
.Po
|
|
such as
|
|
.Xr execv 3
|
|
.Pc ,
|
|
it will stop before executing the first instruction of the new image.
|
|
Also, any setuid or setgid bits on the executable being executed will
|
|
be ignored.
|
|
.It Dv PT_DENY_ATTACH
|
|
This request is the other operation used by the traced process; it allows
|
|
a process that is not currently being traced to deny future traces by its
|
|
parent. All other arguments are ignored. If the process is currently
|
|
being traced, it will exit with the exit status of ENOTSUP; otherwise,
|
|
it sets a flag that denies future traces. An attempt by the parent to
|
|
trace a process which has set this flag will result in a segmentation violation
|
|
in the parent.
|
|
.It Dv PT_CONTINUE
|
|
The traced process continues execution.
|
|
.Fa addr
|
|
is an address specifying the place where execution is to be resumed (a
|
|
new value for the program counter), or
|
|
.Li (caddr_t)1
|
|
to indicate that execution is to pick up where it left off.
|
|
.Fa data
|
|
provides a signal number to be delivered to the traced process as it
|
|
resumes execution, or 0 if no signal is to be sent.
|
|
.It Dv PT_STEP
|
|
The traced process continues execution for a single step. The
|
|
parameters are identical to those passed to
|
|
.Dv PT_CONTINUE.
|
|
.It Dv PT_KILL
|
|
The traced process terminates, as if
|
|
.Dv PT_CONTINUE
|
|
had been used with
|
|
.Dv SIGKILL
|
|
given as the signal to be delivered.
|
|
.It Dv PT_ATTACH
|
|
This call has been replaced with PT_ATTACHEXC.
|
|
.It Dv PT_ATTACHEXC
|
|
This request allows a process to gain control of an otherwise unrelated
|
|
process and begin tracing it. It does not need any cooperation from
|
|
the to-be-traced process. In this case,
|
|
.Fa pid
|
|
specifies the process ID of the to-be-traced process, and the other two
|
|
arguments are ignored. This request requires that the target process
|
|
must have the same real UID as the tracing process, and that it must
|
|
not be executing a setuid or setgid executable. (If the tracing
|
|
process is running as root, these restrictions do not apply.) The
|
|
tracing process will see the newly-traced process stop and may then
|
|
control it as if it had been traced all along. Note that this call differs
|
|
from the prior call (
|
|
.Dv PT_ATTACH )
|
|
in that signals from the child are delivered to the parent as Mach exceptions (see EXC_SOFT_SIGNAL).
|
|
.It Dv PT_DETACH
|
|
This request is like PT_CONTINUE, except that it does not allow
|
|
specifying an alternate place to continue execution, and after it
|
|
succeeds, the traced process is no longer traced and continues
|
|
execution normally.
|
|
.El
|
|
.Pp
|
|
.Sh ERRORS
|
|
Some requests can cause
|
|
.Fn ptrace
|
|
to return
|
|
.Li -1
|
|
as a non-error value; to disambiguate,
|
|
.Va errno
|
|
can be set to 0 before the call and checked afterwards. The possible
|
|
errors are:
|
|
.Bl -tag -width 4n
|
|
.It Bq Er ESRCH
|
|
No process having the specified process ID exists.
|
|
.It Bq Er EINVAL
|
|
.Bl -bullet -compact
|
|
.It
|
|
A process attempted to use
|
|
.Dv PT_ATTACHEXC
|
|
on itself.
|
|
.It
|
|
The
|
|
.Fa request
|
|
was not one of the legal requests.
|
|
.It
|
|
The signal number (in
|
|
.Fa data )
|
|
to
|
|
.Dv PT_CONTINUE
|
|
was neither 0 nor a legal signal number.
|
|
.It
|
|
.Dv PT_GETREGS ,
|
|
.Dv PT_SETREGS ,
|
|
.Dv PT_GETFPREGS ,
|
|
or
|
|
.Dv PT_SETFPREGS
|
|
was attempted on a process with no valid register set. (This is
|
|
normally true only of system processes.)
|
|
.El
|
|
.It Bq Er EBUSY
|
|
.Bl -bullet -compact
|
|
.It
|
|
.Dv PT_ATTACHEXC
|
|
was attempted on a process that was already being traced.
|
|
.It
|
|
A request attempted to manipulate a process that was being traced by
|
|
some process other than the one making the request.
|
|
.It
|
|
A request (other than
|
|
.Dv PT_ATTACHEXC )
|
|
specified a process that wasn't stopped.
|
|
.El
|
|
.It Bq Er EPERM
|
|
.Bl -bullet -compact
|
|
.It
|
|
A request (other than
|
|
.Dv PT_ATTACHEXC )
|
|
attempted to manipulate a process that wasn't being traced at all.
|
|
.It
|
|
An attempt was made to use
|
|
.Dv PT_ATTACHEXC
|
|
on a process in violation of the requirements listed under
|
|
.Dv PT_ATTACHEXC
|
|
above.
|
|
.El
|
|
.El
|