ptrace(3c) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

ptrace(3c)

ptrace(3C)               Standard C Library Functions               ptrace(3C)

NAME
       ptrace  -  allows  a parent process to control the execution of a child
       process

SYNOPSIS
       #include <unistd.h>
       #include <sys/types.h>

       int ptrace(int request, pid_t pid, int addr, int data);

DESCRIPTION
       The ptrace() function allows a parent process to control the  execution
       of a child process. Its primary use is for the implementation of break‐
       point debugging. The child process behaves normally until it encounters
       a signal (see signal.h(3HEAD)), at which time it enters a stopped state
       and  its parent is notified by the wait(3C) function. When the child is
       in the stopped state, its parent can examine and modify its  "core  im‐
       age"  using  ptrace().  Also,  the parent can cause the child either to
       terminate or continue, with the possibility of ignoring the signal that
       caused it to stop.


       The request argument determines the action to be taken by ptrace()  and
       is one of the following:

       0    This  request  must  be issued by the child process if it is to be
            traced by its parent. It turns on  the  child's  trace  flag  that
            stipulates that the child should be left in a stopped state on re‐
            ceipt  of  a  signal  rather than the state specified by func (see
            signal(3C)). The pid, addr, and data arguments are ignored, and  a
            return value is not defined for this request. Peculiar results en‐
            sue if the parent does not expect to trace the child.



       The  remainder  of the requests can only be used by the parent process.
       For each, pid is the process ID of the child. The child must  be  in  a
       stopped state before these requests are made.

       1, 2    With  these  requests, the word at location addr in the address
               space of the child is returned to the parent  process.  If  in‐
               struction  and  data  space  are separated, request 1 returns a
               word from instruction space, and request 2 returns a word  from
               data  space.  If  instruction and data space are not separated,
               either request 1 or request 2 may be used with  equal  results.
               The  data  argument is ignored. These two requests fail if addr
               is not the start address of a word, in which  case  −1  is  re‐
               turned  to  the parent process and the parent's errno is set to
               EIO.


       3       With this request, the word at location  addr  in  the  child's
               user  area  in the system's address space (see <sys/user.h>) is
               returned to the parent process. The data argument  is  ignored.
               This  request  fails if addr is not the start address of a word
               or is outside the user area, in which case −1  is  returned  to
               the parent process and the parent's errno is set to EIO.


       4, 5    With  these  requests,  the value given by the data argument is
               written into the address space of the child at  location  addr.
               If instruction and data space are separated, request 4 writes a
               word  into  instruction space, and request 5 writes a word into
               data space. If instruction and data space  are  not  separated,
               either  request  4 or request 5 may be used with equal results.
               On success, the value written into the  address  space  of  the
               child  is  returned  to  the parent. These two requests fail if
               addr is not the start address of a word. On failure −1  is  re‐
               turned  to  the parent process and the parent's errno is set to
               EIO.


       6       With this request, a few entries in the child's user  area  can
               be written. data gives the value that is to be written and addr
               is the location of the entry. The few entries that can be writ‐
               ten  are  the  general registers and the condition codes of the
               Processor Status Word.


       7       This request causes the child to resume execution. If the  data
               argument  is  0,  all  pending  signals  including the one that
               caused the child to stop are canceled before it resumes  execu‐
               tion.  If the data argument is a valid signal number, the child
               resumes execution as if it had incurred that  signal,  and  any
               other  pending  signals are canceled. The addr argument must be
               equal to 1 for this request. On success, the value of  data  is
               returned  to the parent. This request fails if data is not 0 or
               a valid signal number, in which case −1 is returned to the par‐
               ent process and the parent's errno is set to EIO.


       8       This request causes the child to terminate with the same conse‐
               quences as exit(2).


       9       This request sets the trace bit in the Processor Status Word of
               the child and then executes the same steps as listed above  for
               request  7.  The trace bit causes an interrupt on completion of
               one machine instruction. This effectively allows  single  step‐
               ping of the child.



       To forestall possible fraud, ptrace() inhibits the set-user-ID facility
       on  subsequent  calls  to  one  of  the  exec  family of functions (see
       exec(2)). If a traced process calls one of these  functions,  it  stops
       before  executing the first instruction of the new image showing signal
       SIGTRAP.

ERRORS
       The ptrace() function will fail if:

       EIO      The request argument is an illegal number.


       EPERM    The calling process does not have  appropriate  privileges  to
                control the calling process. See proc(5).


       ESRCH    The pid argument identifies a child that does not exist or has
                not executed a ptrace() call with request 0.


USAGE
       The  ptrace()  function  is  available  only with the 32-bit version of
       libc(3LIB). It is not available with the 64-bit  version  of  this  li‐
       brary.


       The  /proc  debugging  interfaces  should  be used instead of ptrace(),
       which provides quite limited debugger support and is itself implemented
       using the /proc interfaces. There is no actual ptrace() system call  in
       the kernel. See proc(5) and libproc(3lib) for descriptions of the /proc
       debugging interfaces.

ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface StabilityCommitted _ MT-LevelMT-Safe _  Stan‐
       dardSee standards(7).


SEE ALSO
       exec(2),  exit(2),  signal(3C),  wait(3C), signal.h(3HEAD), libc(3LIB),
       libproc(3LIB), proc(5), attributes(7)

Oracle Solaris 11.4               9 Jul 2018                        ptrace(3C)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3