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