*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> ptrace (2)              
Title
Content
Arch
Section
 

ptrace(2)

Contents


NAME    [Toc]    [Back]

       ptrace - Trace the execution of a child process

SYNOPSIS    [Toc]    [Back]

       #include <sys/signal.h> #include <sys/ptrace.h>

       int ptrace(
               long int request,
               long int process,
               ulong_t *address,
               ulong_t data );

PARAMETERS    [Toc]    [Back]

       Determines  the  action  to be taken by the ptrace() function.
  Specifies the process ID.  Determined by the  value
       of  the request parameter.  Determined by the value of the
       request parameter.

DESCRIPTION    [Toc]    [Back]

       The ptrace() function permits a parent process to  control
       execution  of  a  child  process.  It is primarily used by
       utility programs to enable breakpoint debugging.

       The child process behaves normally  until  it  receives  a
       signal.  When  a signal is delivered, the child process is
       stopped, and a SIGCHLD signal is sent to its  parent.  The
       parent  process  can  wait  for  the child process to stop
       using the wait() function.

       When the child process is stopped, its parent process  can
       use  the ptrace() function to examine and modify the image
       memory of the child process, to either terminate the child
       process or permit it to continue.

       As  a security measure, the ptrace() function inhibits the
       set-user ID facility when any subsequent exec function  is
       issued  by  the child process. When a traced process calls
       one of the exec functions, it stops before  executing  the
       first  instruction  of the new image as if it had received
       the SIGTRAP signal.

       The request parameter is set to one of the values  in  the
       following list. Only the PT_TRACE_ME request can be issued
       by child processes; the remaining  requests  can  only  be
       used  by the parent process. For each request, the process
       parameter is the process ID  of  the  child  process.  The
       child  process  must be in a stopped state before the following
 requests are made.  This  request  sets  the  child
       process trace flag. It must be issued by the child process
       that is to be traced by its parent process. When the trace
       flag  is set, the child process is left in a stopped state
       on receipt of a signal, and the action  specified  by  the
       sigaction() function is ignored. The process, address, and
       data parameters are ignored, and the return value  is  not
       defined  for this request.  Do not issue this request when
       the parent process does not expect to trace the child process.
  These requests return the address space data of the
       child process at the location pointed to  by  the  address
       parameter.  The  PT_READ_I  and PT_READ_D requests produce
       equal  results.  The  data  parameter  is  ignored.  These
       requests  fail  when the value of the address parameter is
       not in the address space of the child process or, on  some
       machines,  when  the  address  parameter  is  not properly
       aligned.  These errors return a value of -1, and the  parent
  process  errno is set to [EIO].  This request returns
       the variable of the system's per-process data area for the
       child,  specified by the address parameter. This area contains
 the register values and other information about  the
       process.  On  some machines, the address parameter is subject
 to alignment  constraints.   The  data  parameter  is
       ignored.  This request fails when the value of the address
       parameter is outside of the system's per-process data area
       for  the  child. On failure, a value of -1 is returned and
       the parent process errno is set to [EIO].  These  requests
       write  the  value  of  the data parameter into the address
       space variable  of  the  child  process  at  the  location
       pointed  to  by  the  address parameter. On some machines,
       where necessary, the PT_WRITE_I request  synchronizes  any
       hardware  caches,  if  present. In all other respects, the
       PT_WRITE_I and PT_WRITE_D requests can be used with  equal
       results.  On some machines, these requests return the previous
 contents of the address space variable of the  child
       process,  while  on  other  machines  no  useful  value is
       returned with the exception of System V behavior. System V
       behavior  for  libsys5  returns the value written, and for
       libc behavior it returns zero (0) for success.

              These requests  fail  when  the  address  parameter
              points  to a location in a pure procedure space and
              a copy cannot be made.  These  requests  also  fail
              when  the  value of the address parameter is out of
              range and on some machines, when the address parameter
 is not properly aligned. On failure a value of
              -1 is returned and the parent process errno is  set
              to  [EIO].   This  request  writes the value of the
              data parameter into the variable  of  the  system's
              per-process  data  area for the child, specified by
              the address parameter. This area contains the  register
  values  and other information about the process.
 On some machines, the  address  parameter  is
              subject to alignment constraints. Not all locations
              within the system's per-process data area  for  the
              child  may  be written. This request fails when the
              value of the address parameter is  outside  of  the
              system's  per-process  data  area for the child. On
              failure, a value of -1 is returned and  the  parent
              process  errno  is set to indicate the error.  This
              request permits the child process to resume  execution.
 When the data parameter is zero (0), the signal
 that caused the child process to stop  is  canceled
 before the child process resumes execution.

              When  the  data parameter has a valid signal value,
              the child process resumes execution as though  that
              signal had been received.  When the address parameter
 is equal to 1, execution continues  from  where
              it stopped. When the address parameter is not 1, it
              is assumed to be the address at which  the  process
              should resume execution.

              System  V  behavior  for  libsys5 returns the value
              written, and for libc behavior it returns zero  (0)
              for  success.   This  request  fails  when the data
              parameter is not zero (0) or a valid signal  value.
              On failure, a value of -1 is returned to the parent
              process and the parent  process  errno  is  set  to
              [EIO].   This request terminates a child process as
              if the child process called  the  exit()  function.
              This  request  permits execution to continue in the
              same manner as PT_CONTINUE.  However,  as  soon  as
              possible  after  the  execution  of  at  least  one
              instruction, execution stops again as if the  child
              process had received the SIGTRAP signal.

              Note  that for the Tru64 UNIX operating system, the
              PT_STEP request parameter may cause the traced program
  to  execute  an indefinite number of instructions
  if  the  current  instruction  is  a  branch
              instruction.

ERRORS    [Toc]    [Back]

       If the ptrace() function fails, errno is set to one of the
       following values: The location within  the  system's  perprocess
 data area could not be modified.  An invalid location
 was used for the system's per-process  data  area  or
       the process parameter is out of range.  One of the following
 conditions applies: The  request  parameter  does  not
       have  one  of  the  listed values, or is not valid for the
       machine type on which the process is executing.  The given
       signal  number  is  invalid.  The addressed used is either
       out of bounds or improperly aligned.  The  specified  process
 cannot be traced.  The process parameter identifies a
       child process that does not exist or that has not executed
       this function with the request parameter PT_TRACE_ME.

SEE ALSO    [Toc]    [Back]

      
      
       Functions: exec(2), sigaction(2), wait(2)



                                                        ptrace(2)
[ Back ]
 Similar pages
Name OS Title
pthread_atfork Tru64 Declares fork handler routines to be called when the calling thread's process forks a child process
pxfwait IRIX Obtains information about a calling process' child process
ptrace IRIX process trace
ptrace Linux process trace
ptrace HP-UX process trace
times IRIX get process and child process times
times Tru64 Get process and child process times
times HP-UX get process and child process times
clone Linux create a child process
fork Linux create a child process
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service