SYSCALL Section: Linux Programmer's Manual (2) Updated: 2007-07-26 Index JM Home Page roff page åå syscall - éæ¥ã·ã¹ãã ã³ã¼ã« æ¸å¼ #define _GNU_SOURCE /* or _BSD_SOURCE or _SVID_SOURCE */ #include <unistd.h> #include <sys/syscall.h> /* For SYS_xxx definitions */ int syscall(int number, ...); 説æ syscall() 㯠number ã§æå®ãããã¢ã»ã³ããªè¨èªã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ã·ã¹ãã ã³ã¼ã«ãã æå®ãããå¼ãæ°ãã¤ãã¦å®è¡ããã ã·ã¹ãã ã³ã¼ã«ã®ã·ã³ãã«å®æ°ã¯ããããã¡ã¤ã« <sys/syscall.h> ã«æ¸ããã¦
æ¥ãã¨ãã®å¦çâ sys_rt_sigreturn ãªã©ã®æ»ã£ã¦ããªãã·ã¹ãã ã³ã¼ã«ã®ã¨ãã¯ã³ã¼ã«ã¹ã¿ãã¯ã«æ å ±ãç©ã¾ãªãããã«ããã æ»ã£ã¦ããªãã·ã¹ãã ã³ã¼ã«ãç©ãã¨ãã£ã¨æ®ã£ã¦ãã¾ãã â å ·ä½çãªé¢æ°åâ ãªãã¡ã¬ã³ã¹ã¢ãã¿ã¯ç£è¦å¯¾è±¡ãçºè¡ããã·ã¹ãã ã³ã¼ã«ã®å¼å¿é¢ä¿ãä¿æãã¦ããããã®ããå¼ã³åºãããè¿ã£ã¦ããªãã·ã¹ãã ã³ã¼ã«ã¯éè¦ã§ãããããã¨ããã§ã¤ã³ãï¼ï¼ï¼ãããååã®ã·ã¹ãã ã³ã¼ã«ãã¡ã¢ãã¦ããã ï¼ç¢ºèªã«ç¨ããç°å¢ã®ã«ã¼ãã«ã¯ 2.4.31 ã§ããï¼ è¿ã£ã¦ãããã¨ã確èªãã sys_exitgroup è¿ã£ã¦ããªããã¨ã確èªãã sys_rt_sigreturn sys_exit è¿ã£ã¦ããªãã®ã¯ç¢ºãã ããç´å¾ã«çµäºãã¦ãã¾ãããé¢ä¿ãªãããâ¦ã æªç¢ºèªã ãããããè¿ã£ã¦ããªã sys_sigreturn â 2.6 系㨠2.4 ç³»ã®å·®â ä¸è¦ä¼¼ããããªåããããã
Section: Linux Programmer's Manual (2) Updated: 2008-05-21 Index JM Home Page roff page åå ptrace - ããã»ã¹ã®ãã¬ã¼ã¹ æ¸å¼ #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); 説æ ptrace() ã·ã¹ãã ã³ã¼ã«ã¯ã親ããã»ã¹ããå¥ã®ããã»ã¹ã®å®è¡ã®ç£è¦/å¶å¾¡ã è¡ã£ãããã³ã¢ã¤ã¡ã¼ã¸ (core image) ãã¬ã¸ã¹ã¿ã®èª¿æ»/å¤æ´ã è¡ã£ããããæ段ãæä¾ããã ptrace() ã¯ã主ã«ãã¬ã¼ã¯ãã¤ã³ãã«ãããããã°ãã·ã¹ãã ã³ã¼ã«ã®ãã¬ã¼ã¹ã å®è£ ããã®ã«ç¨ããããã ãã¬ã¼ã¹ãéå§ããã«ã¯ãã¾ã親ããã»ã¹ã§ fork(2)
ãããåã«ãstraceã³ãã³ããã©ãã50è¡ãããã§æ¸ãã¦ã¿ããã¨ãããã®ã§ããããè²¼ã£ã¦ã¿ã¾ã¼ãããããªãã³ã¼ããããC99ã§ãã // strace_modoki.c: Linux/x86å°ç¨ã§ããx86_64ã«ã¼ãã«ã§ã¯-m32ã§ã³ã³ãã¤ã«ãã¦ãåãã¾ããã #include <stdio.h> #include <unistd.h> #include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include <asm/user.h> #include <asm/ptrace.h> int main() { int i; static const char* syscallstr[1000] = {0}; for(i = 0; i < 1000; ++i) syscallstr[i] = "???";
ptraceã®ãµã³ãã«ããã°ã©ã ã¾ã¶ã¡æ°ããptraceã®ãµã³ãã«ãªãï¼ã£ã¦è¨ãããã®ã§straceãç´¹ä»ãã¾ãããstraceã¯ptraceã®é£ããã¨ãããã©ããã¦ããã®ãè¦ãã«ã¯è¯ãã§ãããåãã¦ptraceã使ã人ãè¦ããããããªãæ°ããã¾ãã å ¥éã«ä½¿ããã¨ä¿¡ãã¦ãç°¡åãªãµã³ãã«ãä½ã£ã¦ã¿ãã®ã§å ¬éãLinuxå°ç¨ã§ãã ã½ã¼ã¹ã³ã¼ãã¯ãã¡ãããã©ããã ï¼2008å¹´7æ25æ¥è¿½è¨ï¼éè¦ã¯ãªããããªãã®ã®ãä¸å¿ã©ã¤ã»ã³ã¹ãæ確ã«ãã¾ãããä¿®æ£BSDã©ã¤ã»ã³ã¹ã§ãã ãã¾ãããã°ãã¬ã¼ã¹å¯¾è±¡ã®ã·ã¹ãã ã³ã¼ã«åãããã£ã¨è¡¨ç¤ºãããã¯ãã§ãã以ä¸ã«ç§ã®ç°å¢ã§ã®å®è¡çµæã示ãã¾ãã ç°¡æptraceããã°ã©ã ã®ã³ã³ãã¤ã«ãå®è¡çµæ $ gcc -Wall 20080724_ptrace_simple.c $ ls -l åè¨28 -rw-r--r-- 1 katsuhiro katsuh
ã©ã³ã¿ã¤ã ã»ãã¤ããªã»ããã㣠(KAHO)ã®éçº ãã©ã¯ã«ã»ãªããã¯ã¹æ ªå¼ä¼ç¤¾ 大åãä¸æ´ Contents â éçºã®èæ¯ â ã©ã³ã¿ã¤ã ã»ãã¤ããªã»ãããã£ã¨ã¯ï¼ â æ¢åã®ããã㣠â ã©ã³ã¿ã¤ã ã»ãã¤ããªã»ãããã£ï¼KAHOï¼ã®éçºæ¹é â åä½æ¦è¦ï¼KAHO éçºãã§ã¼ãº1ï¼ â åä½æ¦è¦ï¼KAHO éçºãã§ã¼ãº2ï¼ â KAHOãå©ç¨ããæè¡ â utrace â ãã©ããï¼int3ï¼ãã³ãã© (kprobes) éçºã®èæ¯ ã©ã³ã¿ã¤ã ã»ãã¤ããªã»ãããã£ã¨ã¯ â ãã¤ããªã»ããããé©ç¨ããã½ããã¦ã§ã¢ â ã©ã¤ããããã¨ãå¼ã°ãã â ãããï¼ãå·®åï¼ãã°ãã»ãã¥ãªãã£ãæ©è½æ¡å¼µï¼ é常ã®ããã ãã¤ããªã»ããã å½¢å¼ ã½ã¼ã¹ã³ã¼ã ãã¤ããªã³ã¼ã å¿ è¦ ä¸è¦ ç¨é ã½ããã¦ã§ã¢å ¨è¬ å¶é ç¹ã«ãªã ããã°ã©ã åèµ·å é«å¯ç¨ã·ã¹ãã ï¼éä¿¡æ©å¨çï¼ ãããã£ã«ãã ï¼ä¸
æ®éã®ãã¤ãã®ä¸ãè¡ã: ptrace ã§å®è¡ä¸ã®ããã»ã¹ã«ã¡ãã£ãããåºã Linux ãªã©ã®å¤ãã® Unix çãªOS ã«ã¯ ptrace ã¨ããã·ã¹ãã ã³ã¼ã«ãããã¾ãã ptrace ã使ãã¨å®è¡ä¸ã®ããã»ã¹ã«å¯¾ãã¦ãã¬ã¸ã¹ã¿ã®æ¸ãæããã¡ã¢ãªä¸ã®ãã¼ã¿ã®æ¸ãæãã¨ãã£ããã¾ãã¾ãªæä½ãè¡ããã¨ãã§ãã¾ãã æ®éã®ãã¤ãã®ä¸ãè¡ãã®ç¬¬6åã¨ãã¦ãä»å㯠ptrace ã使ã£ã¦å®è¡ä¸ã®ããã»ã¹ã«ã¡ãã£ãããåºãæ¹æ³ãåãä¸ãããã¨æãã¾ãã ptrace ã¨ã¯ ãããã¬ã®çè«ã¨å®è£ ã«æ¬¡ã®ãããªè¨è¿°ãããã¾ãã Unix ã® ptrace() ã¯æ¬ç©ã®ããã㬠API (ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¤ã³ã¿ã¼ãã§ã¤ã¹) ã®ä¸ä¾ã§ãããååã«ç¸å¿ããå質ãæã£ããããã¬ããµãã¼ãããããã«è¨è¨ããããæåã®å°ç¨ API ã®1ã¤ã§ããã ptrace ã¯ãããã¬ç¨ã«ä½ããã API ã®ããã§
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}