EXECVE
Section: Linux Programmer's Manual (2)
Updated: 1997³â 11¿ù 3ÀÏ
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 Æ÷ÀÎÅÍ·Î ³¡³ª¾ß¸¸ ÇÑ´Ù.
½ÇÇàÇÒ ÇÁ·Î±×·¥À» int main(int argc, char *argv[], char *envp[])¿Í
°°ÀÌ Á¤ÀÇÇϸé Àμö ¹®ÀÚ¿ ¹è¿°ú ȯ°æ º¯¼ö¸¦ main () ÇÔ¼ö¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
execve()°¡ ¼º°øÇÒ °æ¿ì ¹ÝȯÇÏÁö ¾Ê´Â´Ù. ±×¸®°í È£ÃâµÈ ÇÁ·Î¼¼½º´Â
È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ÅؽºÆ®, µ¥ÀÌŸ, bss¿Í ½ºÅÃÀ» µ¤¾î¾´´Ù.
±×¸®°í È£ÃâµÈ ÇÁ·Î¼¼½º´Â È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ PID¿Í exec ½Ã ´ÝÈ÷°Ô ¼³Á¤µÇÁö ¾ÊÀº
¸ðµç ¿¸° ÆÄÀÏ µð½ºÅ©¸³Å͵éÀ» »ó¼Ó¹Þ´Â´Ù. È£ÃâÇÑ ÇÁ·Î¼¼½º¿¡ ´ë±âÁßÀÌ´ø ¸ðµç ½Ã±×³Îµµ
Ŭ¸®¾îµÇ°í È£ÃâÇÑ ÇÁ·Î¼¼½º°¡ ó¸®Çϵµ·Ï ¼³Á¤µÇ¾î ÀÖ´ø ½Ã±×³Îµéµµ ¿ø·¡ »óÅ·ΠµÇµ¹¾Æ°£´Ù.
È£ÃâÇÑ ÇÁ·Î±×·¥À»
ptrace(2)
·Î ÃßÀûÇÏ°í ÀÖ¾ú´Ù¸é execve()°¡ ¼º°øÇÑ ÈÄ SIGTRAPÀÌ
Àü´ÞµÈ´Ù.
¸¸¾à filename°¡ °¡¸®Å°´Â ½ÇÇà ÆÄÀÏÀÇ set-uid ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é
È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ½ÇÁúÀûÀÎ »ç¿ëÀÚ ID(uid)´Â ½ÇÇà ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ·Î ¹Ù²ï´Ù.
À¯»çÇÏ°Ô, ½ÇÇà ÆÄÀÏÀÇ set-gid ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ
½ÇÁúÀûÀÎ ±×·ì ID(gid)µµ ½ÇÇà ÆÄÀÏÀÇ ±×·ìÀ¸·Î ¹Ù²ï´Ù.
¸¸¾à ½ÇÇà ÆÄÀÏÀÌ µ¿Àû ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ°í °øÀ¯ ¶óÀ̺귯¸® stubÀ» Æ÷ÇÔÇÏ´Â
a.out Çü½ÄÀ̶ó¸é ÇÁ·Î±×·¥ ¼öÇà Àü¿¡ ¸®´ª½ºÀÇ µ¿Àû ¸µÄ¿ÀÎ
ld.so(8)
°¡ µ¿ÀÛÇÑ´Ù.
¸¸¾à ½ÇÇà ÆÄÀÏÀÌ µ¿Àû ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ´Â ELF Çü½ÄÀ̶ó¸é PT_INTERP ¼¼±×¸ÕÆ®°¡
°¡¸®Å°´Â À̸§ÀÇ ÀÎÅÍÇÁ¸®ÅÍ°¡ °øÀ¯ ¶óÀ̺귯¸®¸¦ ·ÎµåÇϱâ À§ÇØ µ¿ÀÛÇÒ °ÍÀÌ´Ù.
±× ÀÎÅÍÇÁ¸®ÅÍ´Â º¸Åë ¸®´ª½º libc ¹öÀü 5ÀÇ °æ¿ì /lib/ld-linux.so.1À̸ç,
GNU libc ¹öÀü 2ÀÇ °æ¿ì º¸Åë /lib/ld-linux.so.2ÀÌ´Ù.
¹Ýȯ°ª
¼º°ø½Ã, execve()´Â ¹ÝȯµÇÁö ¾Ê°í, ¿¡·¯½Ã -1ÀÌ ¹ÝȯµÇ°í,
errno
´Â ÀûÀýÈ÷ ¼³Á¤µÈ´Ù.
¿¡·¯
- EACCES
-
ÆÄÀÏÀ̳ª ½ºÅ©¸³Æ® ÀÎÅÍÇÁ¸®ÅÍ°¡ Á¤±Ô ÆÄÀÏÀÌ ¾Æ´Ï´Ù.
- EACCES
-
ÆÄÀÏÀ̳ª ½ºÅ©¸³Æ® ȤÀº ELF ÀÎÅÍÇÁ¸®ÅÍ¿¡ ½ÇÇà ±ÇÇÑÀÌ ¾ø´Ù.
- EACCES
-
ÆÄÀÏ ½Ã½ºÅÛÀÌ
noexec
¼³Á¤À¸·Î ¸¶¿îÆ®µÇ¾ú´Ù.
- EPERM
-
ÆÄÀÏ ½Ã½ºÅÛÀÌ
nosuid
¼³Á¤À¸·Î ¸¶¿îÆ®µÇ¾î ÀÖÀ¸¸ç, »ç¿ëÀÚ°¡ ½´ÆÛÀ¯Àú°¡ ¾Æ´Ï°í ÆÄÀÏÀÌ SUID³ª SGID ºñÆ®°¡
¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù.
- EPERM
-
ÇÁ·Î¼¼½º°¡ ÃßÀû(trace)µÇ°í ÀÖÀ¸¸ç, »ç¿ëÀÚ°¡ ½´ÆÛÀ¯Àú°¡ ¾Æ´Ï°í ÆÄÀÏÀÌ SUID³ª SGID ºñÆ®°¡
¼³Á¤µÇ¾î ÀÖ´Ù.
- E2BIG
-
Àμö ¸®½ºÆ®°¡ ³Ê¹« Å©´Ù.
- ENOEXEC
-
½ÇÇà ÆÄÀÏÀÌ ¾Ë¾Æ º¼¼ö ¾ø´Â Çü½ÄÀÌ´Ù. ´Ù¸¥ Ç÷§Æû¿ëÀÇ ÆÄÀÏÀ̰ųª Çü½Ä»óÀÇ
¿¡·¯¸¦ Áö´Ï°í ÀÖ¾î ½ÇÇàÇÒ ¼ö ¾ø´Ù.
- EFAULT
-
filename
ÀÌ Á¢±ÙÇÒ ¼ö ¾ø´Â ÁÖ¼Ò ¿µ¿ªÀ» °¡¸®Å²´Ù.
- ENAMETOOLONG
-
filename
ÀÌ ³Ê¹« ±æ´Ù.
- ENOENT
-
filename
ȤÀº ½ºÅ©¸³Æ®³ª ELF ÀÎÅÍÇÁ¸®ÅÍ°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª ½ÇÇà½Ã ÇÊ¿ä·Î ÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ãÁö ¸øÇß´Ù.
- ENOMEM
-
Ä¿³Î ¸Þ¸ð¸®°¡ ÃæºÐÄ¡ ¾Ê´Ù.
- ENOTDIR
-
filename
ȤÀº ½ºÅ©¸³Æ®³ª ELF ÀÎÅÍÇÁ¸®ÅÍÀÇ °æ·Î¸íÀÇ ¾ÕºÎºÐ °æ·Î¸í(prefix)ÀÌ µð·ºÅ丮°¡ ¾Æ´Ï´Ù.
- EACCES
-
filename
ȤÀº ½ºÅ©¸³Æ®³ª ELF ÀÎÅÍÇÁ¸®ÅÍÀÇ °æ·Î¸íÀÇ ¾ÕºÎºÐ °æ·Î¸íÀÌ °¡¸®Å°´Â µð·ºÅ丮¸¦ °Ë»öÇÒ ±ÇÇÑÀÌ ¾ø´Ù.
- ELOOP
-
filename
ȤÀº ½ºÅ©¸³Æ®³ª ELF ÀÎÅÍÇÁ¸®¾îÅÍÀÇ °æ·Î¸íÀ» µû¶ó°¡´Â °úÁ¤¿¡ ³Ê¹« ¸¹Àº ½Éº¼¸¯ ¸µÅ©°¡ ¹ß°ßµÇ¾ú´Ù.
- ETXTBSY
-
´Ù¸¥ Çϳª ÀÌ»óÀÇ ÇÁ·Î¼¼½º°¡ ½ÇÇà ÆÄÀÏ¿¡ ¾²±â À§ÇØ ¿¾î³õ¾Ò´Ù.
- EIO
-
I/O ¿¡·¯°¡ ¹ß»ýÇÏ¿´´Ù.
- ENFILE
-
½Ã½ºÅÛ¿¡¼ »ý¼ºÇÒ ¼ö ÀÖ´Â ÃÖ´ë ÆÄÀÏ °³¼ö¿¡ µµ´ÞÇÏ¿´´Ù.
- EMFILE
-
ÇÁ·Î¼¼½º°¡ ¿ ¼ö ÀÖ´Â ÃÖ´ë ÆÄÀÏ °³¼ö¿¡ µµ´ÞÇÏ¿´´Ù.
- EINVAL
-
ELF ½ÇÇà ÆÄÀÏÀÌ Çϳª ÀÌ»óÀÇ PT_INTERP ¼¼±×¸ÕÆ®¸¦ °¡Áö°í ÀÖ´Ù. (Áï ELF ÀÎÅÍÇÁ¸®Å͸¦
Çϳª ÀÌ»ó °¡¸®Å°°í ÀÖ´Ù.)
- EISDIR
-
°¡¸®Å°´Â ELF ÀÎÅÍÇÁ¸®ÅÍ°¡ µð·ºÅ丮´Ù.
- ELIBBAD
-
ELF ÀÎÅÍÇÁ¸®ÅÍ°¡ ¾Ë ¼ö ¾ø´Â Çü½ÄÀÌ´Ù.
ȣȯ
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 ÇÁ·Î¼¼½ºµéÀº ptrace()µÇÁö ¾Ê´Â´Ù.
¸®´ª½º´Â ½ºÅ©¸³Æ®ÀÇ SUID¿Í SGID ºñÆ®´Â ¹«½ÃÇÑ´Ù.
ÆÄÀÏ ½Ã½ºÅÛÀ»
nosuid
¼³Á¤À¸·Î ¸¶¿îÆ®ÇßÀ» ¶§ÀÇ °á°ú´Â ¸®´ª½º ¹öÀü¸¶´Ù ´Ù¸£´Ù:
¾î¶² ¹öÀüÀÇ ¸®´ª½º¿¡¼´Â SUID/SGID ½ÇÇà ÆÄÀÏÀ» ½ÇÇàÇßÀ» ¶§ »ç¿ëÀÚ¿¡°Ô ¾ø´ø
±ÇÇÑÀÌ »ý±â´Â °æ¿ì ½ÇÇàÀ» °ÅºÎÇÏ°í EPERM ¿¡·¯¸¦ ¹ÝȯÇÑ´Ù.
´Ù¸¥ ¹öÀüÀÇ ¸®´ª½º¿¡¼´Â ±×³É SUID/SGID ºñÆ®¸¦ ¹«½ÃÇÏ°í ¼º°øÀûÀ¸·Î ¼öÇàÇÒ °ÍÀÌ´Ù.
#! ·Î ½ÃÀÛÇÏ´Â ½ºÅ©¸³Æ®ÀÇ Ã¹ ¶óÀÎÀÇ ÃÖ´ë Å©±â´Â 127 byteÀÌ´Ù.
°ü·Ã Ç׸ñ
chmod(2),
fork(2),
execl(3),
environ(5),
ld.so(8)
¿ªÀÚ
ASPLINUX<man@asp-linux.co.kr>, 2000³â 7¿ù 29ÀÏ
ÇÑ±Û Manpage ÇÁ·ÎÁ§Æ® (http://man.kldp.org) 2004³â 3¿ù 23ÀÏ
Index
- À̸§
-
- »ç¿ë¹ý
-
- ¼³¸í
-
- ¹Ýȯ°ª
-
- ¿¡·¯
-
- ȣȯ
-
- ÁÖÀÇ
-
- °ü·Ã Ç׸ñ
-
- ¿ªÀÚ
-
This document was created by
man2html,
using the manual pages.
Time: 08:07:01 GMT, March 25, 2004