PTRACE
Section: Linux Programmer's Manual (2) Updated: 7 November 1999 Index
Return to Main Contents
̾Á°
ptrace - process trace
½ñ¼°
#include <sys/ptrace.h>
long int ptrace(enum __ptrace_request request, pid_t pid, void * addr, void * data)
ÀâÌÀ
ptrace
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¿Æ¥×¥í¥»¥¹(parent process)¤¬Â¾¤Î¥×¥í¥»¥¹¤Î
¼Â¹Ô¤ò´Ñ»¡¤·À©¸æ¤·¤¿¤ê¡¢¤½¤Î¥á¥â¥ê¡¦¥¤¥á¡¼¥¸(core image)¤È¥ì¥¸¥¹¥¿¤ò
Ä´¤ÙÊѹ¹¤¹¤ë¼êÃʤòÄ󶡤¹¤ë¡£¤½¤Î¼çÍפʻÈÍÑË¡¤Ï¥Ç¥Ð¥Ã¥¯ÍѤÎ
¥Ö¥ì¡¼¥¯¡¦¥Ý¥¤¥ó¥È(break point)¤Î¼ÂÁõ¤ä¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÄÉÀפǤ¢¤ë¡£
¥È¥ì¡¼¥¹¤ò³«»Ï¤¹¤ë¤Ë¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Ï
fork(2)
¤ò¸Æ¤Ó½Ð¤·¤ÆÀ¸À®¤·¤¿»Ò¥×¥í¥»¥¹¤Ç PTRACE_TRACEME ¤ò¼Â¹Ô¤·¡¢
³¤±¤Æ(ŵ·¿Åª¤Ë¤Ï)
exec(2)
¤ò¹Ô¤¦¡£
Ê̤ÎÊýË¡¤È¤·¤Æ´û¸¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ PTRACE_ATTACH ¤ò»ÈÍѤ·¤Æ¥È¥ì¡¼¥¹¤ò
³«»Ï¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
¥È¥ì¡¼¥¹¤ò¼Â¹ÔÃæ¤Ï»Ò¥×¥í¥»¥¹¤Ï¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤ëÅ٤ˡ¢Î㤨¤½¤ì¤¬
̵»ë¤¹¤Ù¤¥·¥°¥Ê¥ë¤Î¾ì¹ç¤Ë¤Ç¤âÄä»ß¤¹¤ë¡£(SIGKILL ¤ÏÎã³°¤Ç¤¢¤ê¡¢
¤½¤ÎÄ̾ï¤É¤ª¤ê¤Î¸ú²Ì¤ò¤â¤¿¤é¤¹¡£) ¿Æ¥×¥í¥»¥¹¤Ï¼¡¤Î
wait(2)
¤ÎºÝ¤ËÄÌÃΤµ¤ì¡¢Ää»ß¤·¤Æ¤¤¤ë´Ö¤Ë»Ò¥×¥í¥»¥¹¤òÄ´¤Ù¤¿¤ê½¤Àµ¤·¤¿¤ê¤Ç¤¤ë¡£
¿Æ¥×¥í¥»¥¹¤Ï¤½¤ì¤«¤é»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤ò³¤±¤¿¤ê¡¢ÁªÂòŪ¤ËÇÛÁ÷¤µ¤ì¤¿
¥·¥°¥Ê¥ë¤ò̵»ë¤µ¤»¤¿¤ê(¤Þ¤¿Âå¤ê¤ËÊ̤Υ·¥°¥Ê¥ë¤òÇÛÁ÷¤·¤¿¤ê)¤Ç¤¤ë¡£
¿Æ¥×¥í¥»¥¹¤¬¥È¥ì¡¼¥¹¤ò½ªÎ»¤¹¤ë¤È¤¡¢PTRACE_KILL ¤ò»ÈÍѤ·¤Æ»Ò¥×¥í¥»¥¹¤ò
½ªÎ»¤µ¤»¤¿¤ê¡¢PTRACE_DETACH ¤ò»ÈÍѤ·¤ÆÈó¥È¥ì¡¼¥¹¥â¡¼¥É¤Ë¤·¤ÆÄ̾ï¤Î¼Â¹Ô
¤ò³¤±¤µ¤»¤¿¤ê¤Ç¤¤ë¡£
request ¤ÎÃͤ¬¤³¤Î¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤Îưºî¤ò·èÄꤹ¤ë:
- PTRACE_TRACEME
-
¤³¤Î¥×¥í¥»¥¹¤¬¿Æ¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¤³¤È¤ò»Ø¼¨¤¹¤ë¡£
¤³¤Î¥×¥í¥»¥¹¤Ë(SIGKILL ¤ò½ü¤¯)¥·¥°¥Ê¥ë¤¬ÇÛÁ÷¤µ¤ì¤ë¤È¥×¥í¥»¥¹¤Ï
Ää»ß¤µ¤»¤é¤ì¡¢¿Æ¥×¥í¥»¥¹¤Ë
wait
¤òÄ̤·¤ÆÄÌÃΤµ¤ì¤ë¡£
¤Þ¤¿¤³¤ì°Ê¸å¡¢¤³¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤ë
exec
¤Î¸Æ¤Ó½Ð¤·¤Ï SIGTRAP ¤ÎÇÛÁ÷¤¬¹Ô¤ï¤ì¡¢¿·¤·¤¤¥×¥í¥°¥é¥à¤¬¼Â¹Ô¤ò³«»Ï¤¹¤ë
Á°¤Ë¿Æ¥×¥í¥»¥¹¤ËÀ©¸æ¤òÆÀ¤ëµ¡²ñ¤òÍ¿¤¨¤ë¡£¿Æ¥×¥í¥»¥¹¤¬¥È¥ì¡¼¥¹¤òͽ´ü¤·¤Æ
¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥×¥í¥»¥¹¤Ï¤³¤Î¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤¦¤Ù¤¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¡£
(pid, addr, data ¤Ï̵»ë¤µ¤ì¤ë¡£)
¾åµ¤Î¥ê¥¯¥¨¥¹¥È¤Ï»Ò¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¤Î¤ß¹Ô¤ï¤ì¤ë¡£»Ä¤ê¤Î¥ê¥¯¥¨¥¹¥È¤Ï
¿Æ¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤ë¡£°Ê²¼¤Î¥ê¥¯¥¨¥¹¥È¤Ç pid ¤Ïưºî¤ÎÂоÝ
¤È¤Ê¤ë»Ò¥×¥í¥»¥¹¤ò»ØÄꤹ¤ë¡£PTRACE_KILL °Ê³°¤Î¥ê¥¯¥¨¥¹¥È¤ò¹Ô¤¦¤¿¤á¤Ë
¤Ï»Ò¥×¥í¥»¥¹¤ÏÄä»ß¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡£
- PTRACE_PEEKTEXT, PTRACE_PEEKDATA
-
»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
addr
¤Î°ÌÃÖ¤«¤é¥ï¡¼¥É¤òÆÉ¤ß¹þ¤à¡£ÆÉ¤ß¹þ¤ó¤À¥ï¡¼¥É¤Ï
ptrace
¥³¡¼¥ë¤Î·ë²Ì¤È¤·¤ÆÊÖ¤µ¤ì¤ë¡£Linux ¤Ï¥Æ¥¥¹¥È(text)¤È¥Ç¡¼¥¿(data)¤Ç
¥¢¥É¥ì¥¹¶õ´Ö¤ÎʬΥ¤ò¹Ô¤Ã¤Æ¤¤¤Ê¤¤¡£¤½¤ì¤ÇÆó¤Ä¤Î¥ê¥¯¥¨¥¹¥È¤Ï¸½ºß¤Î
¤È¤³¤íƱ¤¸°ÕÌ£¤ò»ý¤Ä¡£(data ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_PEEKUSER
-
»Ò¥×¥í¥»¥¹¤Î
¥æ¡¼¥¶¡¼(USER)
Îΰè¤Î
addr
¤Î¥ª¥Õ¥»¥Ã¥È¤«¤é¥ï¡¼¥É¤òÆÉ¤ß¹þ¤à¡£¥æ¡¼¥¶¡¼Îΰè¤Ï¥ì¥¸¥¹¥¿(register)¤ä
¥×¥í¥»¥¹¤Ë´Ø¤¹¤ë¾¤Î¾ðÊó¤òÊÝ»ý¤·¤Æ¤¤¤ë¡£(<linux/user.h> ¤È <sys/user.h>
¤ò»²¾È)¡£¥ï¡¼¥É¤Ï
ptrace
¥³¡¼¥ë¤Î·ë²Ì¤È¤·¤ÆÊÖ¤µ¤ì¤ë¡£Åµ·¿Åª¤Ë¥ª¥Õ¥»¥Ã¥È¤Ï¥ï¡¼¥É¶³¦¤Ë
¤½¤í¤¨¤é¤ì¤Æ¤¤¤ë¡£¤·¤«¤·¤Ê¤¬¤é¤³¤ì¤Ï¥¢¡¼¥¥Æ¥¯¥Á¥ã¤´¤È¤Ë°Û¤Ã¤Æ¤¤¤ë¡£
(data ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_POKETEXT, PTRACE_POKEDATA
-
¿Æ¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
data
¤Î°ÌÃÖ¤«¤é»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
addr
¤Î°ÌÃ֤إ¥É¤ò¥³¥Ô¡¼¤¹¤ë¡£¾åµ¤ÈƱÍͤ˸½ºß¤Î¤È¤³¤íÆó¤Ä¤Î
¥ê¥¯¥¨¥¹¥È¤ÏƱ¤¸¤Ç¤¢¤ë¡£
- PTRACE_POKEUSR
-
¿Æ¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î
data
¤Î°ÌÃÖ¤«¤é»Ò¥×¥í¥»¥¹¤Î
¥æ¡¼¥¶¡¼
Îΰè¤Î
addr
¤Î¥ª¥Õ¥»¥Ã¥È¤Ë¥ï¡¼¥É¤ò¥³¥Ô¡¼¤¹¤ë¡£¾åµ¤ÈƱÍͤ˥ª¥Õ¥»¥Ã¥È¤Ïŵ·¿Åª¤Ë
¥ï¡¼¥É¶³¦¤Ë¤½¤í¤¨¤é¤ì¤Æ¤¤¤ë¡£¥«¡¼¥Í¥ë¤Î´°Á´À¤ò°Ý»ý¤¹¤ë¤¿¤á¤Ë
USER
Îΰè¤Î¤¢¤ëÉôʬ¤Î½¤Àµ¤Ïµö¤µ¤ì¤Æ¤¤¤Ê¤¤¡£
- PTRACE_GETREGS, PTRACE_GETFPREGS
-
¤½¤ì¤¾¤ì»Ò¥×¥í¥»¥¹¤Î°ìÈ̥쥸¥¹¥¿¤ÈÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤ò¿Æ¥×¥í¥»¥¹¤Î
data ¤Î°ÌÃ֤˥³¥Ô¡¼¤¹¤ë¡£¤³¤Î data ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë´Ø¤·¤Æ¤Ï
<linux/user.h> ¤ò»²¾È¤¹¤ë¤³¤È¡£(addr ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_SETREGS, PTRACE_SETFPREGS
-
¤½¤ì¤¾¤ì»Ò¥×¥í¥»¥¹¤Î°ìÈ̥쥸¥¹¥¿¤ÈÉâÆ°¾®¿ôÅÀ¥ì¥¸¥¹¥¿¤Ø¿Æ¥×¥í¥»¥¹¤Î
data ¤Î°ÌÃÖ¤«¤é¥³¥Ô¡¼¤¹¤ë¡£PTRACE_POKEUSER ¤ÈƱÍͤ˰ìÉô¤Î°ìÈÌ
¥ì¥¸¥¹¥¿¤Î½¤Àµ¤Ïµö¤µ¤ì¤Æ¤¤¤Ê¤¤¡£(addr ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_CONT
-
Ää»ß¤·¤¿»Ò¥×¥í¥»¥¹¤Î¼Â¹Ô¤òºÆ³«¤µ¤»¤ë¡£¤â¤· data ¤¬¥¼¥í¤Ç¤Ê¤¯¡¢
SIGSTOP ¤Ç¤â¤Ê¤±¤ì¤Ð¡¢»Ò¥×¥í¥»¥¹¤ËÇÛÁ÷¤µ¤ì¤ë¥·¥°¥Ê¥ë¤È²ò¼á¤µ¤ì¤ë¡£
¥¼¥í¤ä SIGSTOP ¤Î¾ì¹ç¤Ï¥·¥°¥Ê¥ë¤ÏÇÛÁ÷¤µ¤ì¤Ê¤¤¡£¤³¤ì¤Ë¤è¤Ã¤Æ¿Æ¥×¥í
¥»¥¹¤Ï»Ò¥×¥í¥»¥¹¤ËÁ÷¤é¤ì¤¿¥·¥°¥Ê¥ë¤ò¼ÂºÝ¤ËÇÛÁ÷¤¹¤ë¤«¤É
¤¦¤«À©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
(addr ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_SYSCALL, PTRACE_SINGLESTEP
-
PTRACE_CONT ¤ÈƱÍͤËÄä»ß¤·¤¿»Ò¥×¥í¥»¥¹¤òºÆ³«¤¹¤ë¡£¤·¤«¤·¡¢PTRACE_SYSCALL
¤Î¾ì¹ç¤Ï»Ò¥×¥í¥»¥¹¤¬¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÆþ¤ë»þ¤ÈÈ´¤±½Ð¤·¤¿»þ¤Ë¡¢
PTRACE_SINGLESTEP ¤Î¾ì¹ç¤ÏÌ¿Îá¤ò°ì¤Ä¤À¤±¼Â¹Ô¤·¤¿»þ¤ËÄä»ß¤¹¤ë¤è¤¦¤Ë
ÀßÄꤵ¤ì¤ë¡£(»Ò¥×¥í¥»¥¹¤ÏÄ̾ï¤ÈƱ¤¸¤è¤¦¤Ë¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤Ã¤¿¾ì¹ç¤Ë
¤âÄä»ß¤¹¤ë¡£) ¿Æ¥×¥í¥»¥¹¤«¤é¸«¤ë¤È»Ò¥×¥í¥»¥¹¤Ï SIGTRAP ¤ò¼õ¿®¤·¤Æ
Ää»ß¤·¤¿¤è¤¦¤Ë¸«¤¨¤ë¡£¤½¤ì¤ÇÎ㤨¤ÐºÇ½é¤Î PTRACE_SYSCALL ¤ÇÄä»ß¤·¤¿»þ¤Ë
°ú¤¿ô¤òÄ´¤Ù¤Æ¤µ¤é¤Ë PTRACE_SYSCALL ¤ò¼Â¹Ô¤·¡¢2²óÌܤÎÄä»ß¤Ç¥·¥¹¥Æ¥à
¥³¡¼¥ë¤ÎÊÖ¤êÃͤòÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤¤ë¡£(addr ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_KILL
-
»Ò¥×¥í¥»¥¹¤Ë SIGKILL ¤òÁ÷¤ê½ªÎ»¤µ¤»¤ë¡£(addr ¤È data ¤Ï
̵»ë¤µ¤ì¤ë¡£)
- PTRACE_ATTACH
-
pid
¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥»¥¹¤ËÀܳ(attach)¤·¡¢¤½¤ì¤ò¸½ºß¤Î¥×¥í¥»¥¹¤Î
»Ò¥×¥í¥»¥¹¤È¤·¤Æ¥È¥ì¡¼¥¹¤Ç¤¤ë¤è¤¦¤Ë¤¹¤ë¡£»Ò¥×¥í¥»¥¹¤Ï PTRACE_TRACEME
¤·¤¿¤«¤Î¤è¤¦¤Ë¿¶Éñ¤¦¡£¸½ºß¤Î¥×¥í¥»¥¹¤Ï¤½¤Î¤Û¤È¤ó¤É¤ÎÌÜŪ¤Ë¤ª¤¤¤Æ¡¢
¤½¤Î»Ò¥×¥í¥»¥¹¤Î¼ÂºÝ¤Î¿Æ¤Ë¤Ê¤ë¡£(Î㤨¤Ð»Ò¥×¥í¥»¥¹¤Î¥¤¥Ù¥ó¥È¤Î
¤ÎÄÌÃΤò¼õ¤±¤È¤Ã¤¿¤ê¡¢
ps(1)
¤Ç¿Æ¤È¤·¤ÆÉ½¼¨¤µ¤ì¤¿¤ê¤¹¤ë¡£) ¤·¤«¤·»Ò¥×¥í¥»¥¹¤Ç
getppid(2)
¤ò¼Â¹Ô¤·¤¿¾ì¹ç¤Ë¤Ï¸µ¤Î¿Æ¥×¥í¥»¥¹¤Î PID ¤¬ÊÖ¤µ¤ì¤ë¡£
»Ò¥×¥í¥»¥¹¤Ë¤Ï SIGSTOP ¤òÁ÷¤é¤ì¤ë¤¬¡¢¤³¤Î¥³¡¼¥ë¤¬´°Î»¤¹¤ëÁ°¤ËÄä»ß¤¹¤ë
ɬÍפϤʤ¤¡£»Ò¥×¥í¥»¥¹¤ÎÄä»ß¤òÂԤĤˤÏ
wait
¤ò»ÈÍѤ¹¤ë¤³¤È¡£(addr ¤È data ¤Ï̵»ë¤µ¤ì¤ë¡£)
- PTRACE_DETACH
-
PTRACE_CONT ¤ÈƱÍͤËÄä»ß¤·¤¿»Ò¥×¥í¥»¥¹¤òºÆ³«¤¹¤ë¡£¤·¤«¤·ºÇ½é¤Ë¤½¤Î
¥×¥í¥»¥¹¤ÎʬΥ(detach)¤ò¹Ô¤¤¡¢PTRACE_ATTACH ¤Î¿Æ¤ÎÀڤ괹¤¨¤È
PTRACE_TRACEME ¤Î¸ú²Ì¤ò¼è¤ê¾Ã¤¹¡£¤µ¤é¤Ë¡¢°Õ¿Þ¤·¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤¬¡¢
Linux ¤Ç¤Ï¡¢¥È¥ì¡¼¥¹¤µ¤ì¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤Ï¤É¤Î¤è¤¦¤ÊÊýË¡¤Ç¥È¥ì¡¼¥¹¤ò
³«»Ï¤µ¤ì¤¿¤È¤·¤Æ¤â¡¢¤³¤ÎÊýË¡¤ÇʬΥ(detach)¤Ç¤¤ë¡£
Ãí°Õ
ptrace
¤Î°ú¤¿ô¤Î·¿¤Ï¥×¥í¥È¥¿¥¤¥×¤Î¤è¤¦¤Ë·è¤Ã¤Æ¤¤¤ë¤Ë¤â¤«¤«¤ï¤é¤º¡¢
GNU libc ¤Ç¤Ï¸½ºß¤Î¤È¤³¤í
ptrace
¤ÏºÇ½é¤Î request °ú¤¿ô¤Î¤ß¸ÇÄê¤Ç²ÄÊѰú¤¿ô´Ø¿ô¤È¤·¤ÆÀë¸À¤µ¤ì¤Æ¤¤¤ë¡£
¤³¤ì¤ÏÉÔɬÍפʻĤê¤Î°ú¤¿ô¤¬¾Êά²Äǽ¤Ê¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤ë¡£¤·¤«¤·
¤³¤ì¤Ï
gcc(1)
¤ÎÈó¸ø¼°¤Îưºî¤ò»ÈÍѤ·¤Æ¤¤¤ë¡£
init(8)
¤¹¤Ê¤ï¤Á PID 1 ¤Î¥×¥í¥»¥¹¤Ï¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£
¥á¥â¥ê¤ÎÆâÍÆ¤ä USER Îΰè¤ÎÇÛÃÖ¤Ï OS ¤ä¥¢¥¡¼¥Æ¥¯¥Á¥ã¤Ç´°Á´¤ËÆÈÆÃ¤Ç¤¢¤ë¡£
¥ï¡¼¥É(word)¤ÎÂ礤µ¤Ï OS ¤Î¼ïÊ̤ˤè¤Ã¤Æ·èÄꤵ¤ì¤ë¡£(Î㤨¤Ð
32¥Ó¥Ã¥È¤Î Linux ¤Ç¤Ï 32¥Ó¥Ã¥È¤Ç¤¢¤ë¡£)
¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥È¥ì¡¼¥¹¤µ¤ì¤ë¥×¥í¥»¥¹¤Îưºî¤Ëº³ºÙ¤Ê°ã¤¤¤¬
µ¯¤³¤ë¤³¤È¤¬¤¢¤ë¡£Î㤨¤Ð¡¢¥×¥í¥»¥¹¤¬ PTRACE_ATTACH ¤Ë¤è¤Ã¤ÆÀܳ¤µ¤ì¤¿
¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥×¥í¥»¥¹¤¬Ää»ß¤·¤¿»þ¤Ç¤âËÜÍè¤Î¿Æ¤Ï
wait
¤ò»È¤Ã¤ÆÄÌÃΤòÆÀ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¤·¡¢¿·¤·¤¤¿Æ¤Ë¤è¤Ã¤Æ¸ú²ÌŪ¤Ë
¤³¤ÎÄÌÃΤò¿¿»÷¤ëÊýË¡¤â¤Ê¤¤¡£
¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ï¸½ºß¤Î Linux ¤Ë¤ª¤±¤ë
ptrace
¥³¡¼¥ë¤Îưºî¤Ë¤Ä¤¤¤Æµ½Ò¤·¤Æ¤¤¤ë¡£Â¾¤Î¼ïÎà¤Î Unix ¤Ë¤ª¤¤¤Æ¤Ï
¤½¤Îưºî¤ÏÃø¤·¤¯°Û¤Ã¤Æ¤¤¤ë¡£¤É¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤ª¤¤¤Æ¤â
ptrace
¤Ï¶ËÅÙ¤Ë OS ¤ä¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ë°Í¸¤·¤Æ¤¤¤ë¡£
SunOS ¤Î¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ë¤Ï
ptrace
¤Ï¡ÖÆÈÆÃ¤ÇÉԲIJò¡×¤Èµ½Ò¤µ¤ì¤Æ¤¤¤ë¡£Solaris 2 ¤Ç¤Ï proc ¥Ù¡¼¥¹¤Î
¥Ç¥Ð¥Ã¥°¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æ
ptrace
¤Î¾å°Ì¸ß´¹´Ø¿ô¤¬¼ÂÁõ¤µ¤ì¡¢¤è¤ê¶¯ÎϤÇÅý°ì¤Î¼è¤ì¤¿¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
ÊÖ¤êÃÍ
À®¸ù¤·¤¿¾ì¹ç¤Ë¤Ï PTRACE_PEEK* ¥ê¥¯¥¨¥¹¥È¤ÏÍ׵ᤵ¤ì¤¿¥Ç¡¼¥¿¤òÊÖ¤·¡¢
¤½¤ì°Ê³°¤Î¾ì¹ç¤Ë¤Ï¥¼¥í¤òÊÖ¤¹¡£¥¨¥é¡¼¤Î¾ì¹ç¤Ë¤Ï -1 ¤òÊÖ¤·¡¢
errno(3)
¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£PTRACE_PEEK* ¥ê¥¯¥¨¥¹¥È¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ë¤â -1 ¤ò
ÊÖ¤¹¾ì¹ç¤¬¤¢¤ë¤¿¤á¡¢¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¤«¤É¤¦¤«¤òÄ´¤Ù¤ë¤¿¤á¤Ë¤Ï
errno
¤ÎÃͤò¥Á¥§¥Ã¥¯¤¹¤ëɬÍפ¬¤¢¤ë¡£
¥¨¥é¡¼
- EPERM
-
»ØÄꤷ¤¿¥×¥í¥»¥¹¤ò¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£¤³¤ì¤Ï¿Æ¥×¥í¥»¥¹¤¬
ɬÍפʸ¢¸Â¤ò»ý¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿¤³¤È¤Ëµ¯°ø¤¹¤ë¡£¥ë¡¼¥È¤Ç¤Ê¤¤¥×¥í¥»¥¹¤Ï
¥·¥°¥Ê¥ë¤òÁ÷¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¥×¥í¥»¥¹¤ä setuid/setgid ¥×¥í¥°¥é¥à¤ò
¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£ÅöÁ³¤Î¤³¤È¤Ê¤¬¤é´û¤Ë¥È¥ì¡¼¥¹¤µ¤ì¤Æ¤¤¤ë
¥×¥í¥»¥¹¤ä
init
(PID 1)¤ò¥È¥ì¡¼¥¹¤¹¤ë¤³¤È¤â¤Ç¤¤Ê¤¤¡£
- ESRCH
-
»ØÄꤷ¤¿¥×¥í¥»¥¹¤¬Â¸ºß¤·¤Ê¤¤¤«¡¢
¸½ºß¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬¥È¥ì¡¼¥¹¤·¤Æ¤¤¤ë»Ò¥×¥í¥»¥¹¤Ç¤Ï¤Ê¤¤¤«¡¢
(Ää»ß¤·¤Æ¤¤¤ë¤³¤È¤¬É¬Íפʥꥯ¥¨¥¹¥È¤Ê¤Î¤Ë)Ää»ß¤·¤Æ¤¤¤Ê¤¤¡£
- EIO
-
request ¤¬ÉÔÀµ¤Ç¤¢¤ë¤«¡¢¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥êÎΰè¤Î
ÉÔÀµ¤Ê¾ì½ê¤òÆÉ¤ß½ñ¤¤·¤è¤¦¤È¤·¤¿¤«¡¢¥ï¡¼¥É¶³¦°ãÈ¿¤«¡¢
¼Â¹ÔºÆ³«¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤ª¤¤¤ÆÉÔÀµ¤Ê¥·¥°¥Ê¥ë¤ò»ØÄꤷ¤¿¡£
- EFAULT
-
¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤Î¥á¥â¥ê¤Î¤¦¤ÁÉÔÀµ¤ÊÎΰè¤ÎÆÉ¤ß½ñ¤¤ò»î¤ß¤¿¡£
¤¿¤¤¤Æ¤¤¤Ï¥á¥â¥ê¤¬¥¢¥¯¥»¥¹²Äǽ¤È¤·¤Æ¥Þ¥Ã¥×¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤Ë¤è¤ë¡£
»Äǰ¤Ê¤³¤È¤Ë Linux ¤Ë¤ª¤¤¤Æ¤³¤Î¥¨¥é¡¼¤Ï¾ì¹ç¤Ë¤è¤Ã¤Æ EIO ¤òÊÖ¤·¤¿¤ê
RFAULT ¤òÊÖ¤·¤¿¤ê¤¹¤ë¡£
½àµò
SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3
´ØÏ¢¹àÌÜ
exec(3),
wait(2),
signal(2),
fork(2),
gdb(1),
strace(1)
Index
- ̾Á°
-
- ½ñ¼°
-
- ÀâÌÀ
-
- Ãí°Õ
-
- ÊÖ¤êÃÍ
-
- ¥¨¥é¡¼
-
- ½àµò
-
- ´ØÏ¢¹àÌÜ
-
|