|
|||||||
|
|
EXECVESection: Linux Programmer's Manual (2)Updated: 1997-09-03 Index Return to Main Contents ̾Á°execve - ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë½ñ¼°#include <unistd.h>int execve (const char *filename, char *const argv [], char *const envp[]); ÀâÌÀexecve() ¤Ï¡¢filename ¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¡£ filename ¤Ï¡¢¥Ð¥¤¥Ê¥ê¼Â¹Ô·Á¼°¤«¡¢"#! interpreter [arg]" ¤È¤¤¤¦·Á¼°¤Î¹Ô¤Ç»Ï¤Þ¤ë¥¹¥¯¥ê¥×¥È¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¸å¼Ô¤Î¾ì¹ç¡¢interpreter ¤ÏŬÀڤʼ¹ԥե¡¥¤¥ë¤Î¥Ñ¥¹Ì¾¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢ ¤½¤ì¼«¿È¤¬¥¹¥¯¥ê¥×¥È¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤½¤·¤Æ¤½¤ì¤Ï interpreter [arg] filename ¤Î·Á¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¡£argv ¤Ï¿·¤·¤¤¥×¥í¥°¥é¥à¤ËÅϤµ¤ì¤ë°ú¤¿ôʸ»úÎó¤ÎÇÛÎó¤Ç¤¢¤ë¡£ envp ¤Ïʸ»úÎó¤ÎÇÛÎó¤Ç¤¢¤ê¡¢ÅÁÅýŪ¤Ë key=value ¤Î·Á¼°¤ò ¤·¤Æ¤ª¤ê¡¢¿·¤·¤¤¥×¥í¥°¥é¥à¤Î´Ä¶ÊÑ¿ô¤È¤·¤ÆÅϤµ¤ì¤ë¡£ argv ¤È envp ¤ÎξÊý¤È¤â NULL ¥Ý¥¤¥ó¥¿¡¼¤Ç½ª¤Ã¤Æ¤¤¤ë ɬÍפ¬¤¢¤ë¡£°ú¤¿ôÇÛÎó¤È´Ä¶ÊÑ¿ô¤Ï¸Æ¤Ó½Ð¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Î main ´Ø¿ô¤ò int main(int argc, char *argv[], char *envp[]) ¤Î¤è¤¦¤ËÄêµÁ¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥¢¥¯¥»¥¹²Äǽ¤Ë¤Ê¤ë¡£ À®¸ù¤·¤¿¾ì¹ç¡¢execve() ¤ÏÊÖ¤é¤Ê¤¤¡£ ¤½¤·¤Æ¡¢¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤Î text, data, bss, ¥¹¥¿¥Ã¥¯¤Ï¡¢ÆÉ¤ß¹þ¤Þ¤ì ¤¿¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤Æ¾å½ñ¤¤µ¤ì¤ë¡£ ¸Æ¤Ó½Ð¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤Î PID ¤ª¤è¤Ó exec »þ¥¯¥í¡¼¥º(close on exec)¤ÎÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤¹¤Ù¤Æ¤Î ¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤ò·Ñ¾µ¤¹¤ë¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ç¤ÎÊÝα¥·¥°¥Ê¥ë¤Ï²ò½ü¤µ¤ì¤ë¡£¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥°¥é¥à¤Ç ÀßÄꤵ¤ì¤¿¥·¥°¥Ê¥ëÊá³Í»þ¤Îưºî¤Ï¥Ç¥Õ¥©¥ë¥Èưºî¤ËÌᤵ¤ì¤ë¡£ SIGCHLD ¥·¥°¥Ê¥ë¤¬ SIG_IGN ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï SIG_DFL ¤Ë¥ê¥»¥Ã¥È ¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¤·¡¢¤µ¤ì¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£ ¤â¤·¸µ¤Î¥×¥í¥°¥é¥à¤¬ ptrace ¤µ¤ì¤Æ¤¤¤ë¤È¡¢execve() ¤¬À®¸ù¤· ¤¿¸å¤Ë¤½¤Î¥×¥í¥°¥é¥à¤Ë SIGTRAP ¤¬Á÷¤é¤ì¤ë¡£ ¤â¤· filename ¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Ë set-uid ¥Ó¥Ã¥È¤¬ ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î͸ú(effective)¥æ¡¼¥¶ ID ¤Ï ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Î½êͼÔ(owner)¤ËÊѹ¹¤µ¤ì¤ë¡£Æ±ÍÍ¤Ë¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Ë set-gid ¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î͸ú¥°¥ë¡¼¥× ID¤Ï ¥×¥í¥°¥é¥à¥Õ¥¡¥¤¥ë¤Î¥°¥ë¡¼¥×(group)¤ËÊѹ¹¤µ¤ì¤ë¡£ ¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬¶¦Í¥é¥¤¥Ö¥é¥ê¤Î¥¹¥¿¥Ö¤ò´Þ¤ó¤À¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥¯ ¤µ¤ì¤¿ a.out ¼Â¹Ô·Á¼°¤À¤Ã¤¿¾ì¹ç¡¢¼Â¹Ô¤Î³«»Ï»þ¤Ë Linux ¤Î ¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥«¡¼ ld.so(8) ¤¬¸Æ¤Ó½Ð¤·¡¢¶¦Í¥é¥¤¥Ö¥é¥ê¤ò¥á¥â¥ê¤ËÆÉ¤ß¹þ¤ó¤Ç¥ê¥ó¥¯¤ò¹Ô¤¦¡£ ¼Â¹Ô¥Õ¥¡¥¤¥ë¤¬¥À¥¤¥Ê¥ß¥Ã¥¯¡¦¥ê¥ó¥¯¤µ¤ì¤¿ ELF ¼Â¹Ô·Á¼°¤À¤Ã¤¿¾ì¹ç¡¢ PT_INTERP ¥»¥°¥á¥ó¥È¤Ë»ØÄꤵ¤ì¤¿¥¤¥ó¥¿¥×¥ê¥¿¡¼¤¬É¬Í×¤Ê ¶¦Í¥é¥¤¥Ö¥é¥ê(shared library)¤òÆÉ¤ß¹þ¤à¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£ Ä̾ï»ÈÍѤµ¤ì¤ë¥¤¥ó¥¿¡¼¥×¥ê¥¿¡¼¤Ï Linux libc version 5 ¤ò¥ê¥ó¥¯¤·¤¿¥Ð¥¤¥Ê¥ê ¤Î¾ì¹ç¤Ë¤Ï /lib/ld-linux.so.1 ¤¬¡¢GNU libc version 2 ¤ò¥ê¥ó¥¯¤·¤¿ ¥Ð¥¤¥Ê¥ê¤Î¾ì¹ç¤Ë¤Ï /lib/ld-linux.so.2 ¤¬»ÈÍѤµ¤ì¤ë¡£ ÊÖ¤êÃÍÀ®¸ù¤¹¤ë¤È execve() ¤ÏÊÖ¤é¤Ê¤¤¡£¥¨¥é¡¼¤Î¾ì¹ç¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤òŬÅö¤ËÀßÄꤹ¤ë¡£¥¨¥é¡¼
½àµòSVr4, SVID, X/OPEN, BSD 4.3. POSIX ¤Ë¤Ï #! ưºî¤Ë¤Ä¤¤¤Æ¤Îµ½Ò¤Ï ¤Ê¤¤¤¬Â¾¤Ï¸ß´¹À¤¬¤¢¤ë¡£SVr4 ¤Ë¤Ï¾¤Ë EAGAIN, EINTR, ELIBACC, ENOLINK, EMULTIHOP ¤Ë¤Ä¤¤¤Æ¤Îµ½Ò¤¬¤¢¤ë¡£POSIX ¤Ë¤Ï ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR, ELIBBAD ¥¨¥é¡¼¾õÂ֤ˤĤ¤¤Æ ¤Îµ½Ò¤Ï¤Ê¤¤¡£Ãí°ÕSUID ¤È SGID ¥×¥í¥»¥¹¤Ï¡¢¤½¤ì¤¾¤ì SUID, SGID ¤È¤·¤Æ ptrace() ¤Ç¤¤Ê¤¤¡£#! ¼Â¹Ô·Á¼°¤Î¥·¥§¥ë¡¦¥¹¥¯¥ê¥×¥È¤Î£±¹ÔÌܤˤϺÇÂç 127 ʸ»ú¤¬µö¤µ¤ì¤Æ¤¤¤ë¡£ Linux ¤Ï¥¹¥¯¥ê¥×¥È¤Î SUID ¥Ó¥Ã¥È¤È SGID ¥Ó¥Ã¥È¤ò̵»ë¤¹¤ë¡£ ´ØÏ¢¹àÌÜchmod(2), fork(2), execl(3), environ(5), ld.so(8).
Index | ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |