6L5LinuxÁªÃË atexit£¨ÉèÖóÌÐòÕý³£½áÊøÇ°µ÷Óõĺ¯Êý£© |
Ïà¹Øº¯Êý | _exit,exit,on_exit6L5LinuxÁªÃË
|
±íÍ·Îļþ | #include<stdlib.h>6L5LinuxÁªÃË
|
¶¨Ò庯Êý | int atexit (void (*function)(void));6L5LinuxÁªÃË
|
º¯Êý˵Ã÷ | atexit()ÓÃÀ´ÉèÖÃÒ»¸ö³ÌÐòÕý³£½áÊøÇ°µ÷Óõĺ¯Êý¡£µ±³ÌÐòͨ¹ýµ÷ÓÃexit()»ò´ÓmainÖзµ»ØÊ±£¬²ÎÊýfunctionËùÖ¸¶¨µÄº¯Êý»áÏȱ»µ÷Óã¬È»ºó²ÅÕæÕýÓÉexit()½áÊø³ÌÐò¡£6L5LinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôò·µ»Ø0£¬·ñÔò·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrnoÖС£6L5LinuxÁªÃË
|
·¶Àý | #include<stdlib.h>6L5LinuxÁªÃË void my_exit(void)6L5LinuxÁªÃË {6L5LinuxÁªÃË printf(¡°before exit () !n¡±);6L5LinuxÁªÃË }6L5LinuxÁªÃË main()6L5LinuxÁªÃË {6L5LinuxÁªÃË atexit (my_exit);6L5LinuxÁªÃË exit(0);6L5LinuxÁªÃË }6L5LinuxÁªÃË
|
Ö´ÐÐ | before exit()!6L5LinuxÁªÃË
|
| ¡¡ |
6L5LinuxÁªÃË
| 6L5LinuxÁªÃË execl£¨Ö´ÐÐÎļþ£© |
Ïà¹Øº¯Êý | fork£¬execle£¬execlp£¬execv£¬execve£¬execvp6L5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>6L5LinuxÁªÃË
|
¶¨Ò庯Êý | int execl(const char * path,const char * arg,....);6L5LinuxÁªÃË
|
º¯Êý˵Ã÷ | execl()ÓÃÀ´Ö´ÐвÎÊýpath×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬½ÓÏÂÀ´µÄ²ÎÊý´ú±íÖ´ÐиÃÎļþʱ´«µÝ¹ýÈ¥µÄargv(0)¡¢argv[1]¡¡£¬×îºóÒ»¸ö²ÎÊý±ØÐëÓÿÕÖ¸Õë(NULL)×÷½áÊø¡£6L5LinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrnoÖС£6L5LinuxÁªÃË
|
·¶Àý | #include<unistd.h>6L5LinuxÁªÃË main()6L5LinuxÁªÃË {6L5LinuxÁªÃË execl(¡°/bin/ls¡±,¡±ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char * )0);6L5LinuxÁªÃË }6L5LinuxÁªÃË
|
Ö´ÐÐ | /*Ö´ÐÐ/bin/ls -al /etc/passwd */6L5LinuxÁªÃË -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
|
| ¡¡ |
6L5LinuxÁªÃË
| 6L5LinuxÁªÃË execlp£¨´ÓPATH »·¾³±äÁ¿ÖвéÕÒÎļþ²¢Ö´ÐУ© |
Ïà¹Øº¯Êý | fork£¬execl£¬execle£¬execv£¬execve£¬execvp6L5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>6L5LinuxÁªÃË
|
¶¨Ò庯Êý | int execlp(const char * file,const char * arg,¡¡)£»6L5LinuxÁªÃË
|
º¯Êý˵Ã÷ | execlp()»á´ÓPATH »·¾³±äÁ¿ËùÖ¸µÄĿ¼ÖвéÕÒ·ûºÏ²ÎÊýfileµÄÎļþÃû£¬ÕÒµ½ºó±ãÖ´ÐиÃÎļþ£¬È»ºó½«µÚ¶þ¸öÒÔºóµÄ²ÎÊýµ±×ö¸ÃÎļþµÄargv[0]¡¢argv[1]¡¡£¬×îºóÒ»¸ö²ÎÊý±ØÐëÓÿÕÖ¸Õë(NULL)×÷½áÊø¡£6L5LinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrno ÖС£6L5LinuxÁªÃË
|
´íÎó´úÂë | ²Î¿¼execve()¡£6L5LinuxÁªÃË
|
·¶Àý | /* Ö´ÐÐls -al /etc/passwd execlp()»áÒÀPATH ±äÁ¿ÖеÄ/binÕÒµ½/bin/ls */6L5LinuxÁªÃË #include<unistd.h>6L5LinuxÁªÃË main()6L5LinuxÁªÃË {6L5LinuxÁªÃË execlp(¡°ls¡±,¡±ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char *)0);6L5LinuxÁªÃË }6L5LinuxÁªÃË
|
Ö´ÐÐ | -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
|
| ¡¡ |
6L5LinuxÁªÃË
| 6L5LinuxÁªÃË execv£¨Ö´ÐÐÎļþ£© |
Ïà¹Øº¯Êý | fork£¬execl£¬execle£¬execlp£¬execve£¬execvp6L5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>6L5LinuxÁªÃË
|
¶¨Ò庯Êý | int execv (const char * path, char * const argv[ ]);6L5LinuxÁªÃË
|
º¯Êý˵Ã÷ | execv()ÓÃÀ´Ö´ÐвÎÊýpath×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬Óëexecl()²»Í¬µÄµØ·½ÔÚÓÚexecve()Ö»ÐèÁ½¸ö²ÎÊý£¬µÚ¶þ¸ö²ÎÊýÀûÓÃÊý×éÖ¸ÕëÀ´´«µÝ¸øÖ´ÐÐÎļþ¡£6L5LinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrno ÖС£6L5LinuxÁªÃË
|
´íÎó´úÂë | Çë²Î¿¼execve£¨£©¡£6L5LinuxÁªÃË
|
·¶Àý | /* Ö´ÐÐ/bin/ls -al /etc/passwd */6L5LinuxÁªÃË #include<unistd.h>6L5LinuxÁªÃË main()6L5LinuxÁªÃË {6L5LinuxÁªÃË char * argv[ ]={¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char*) }};6L5LinuxÁªÃË execv(¡°/bin/ls¡±,argv);6L5LinuxÁªÃË }6L5LinuxÁªÃË
|
Ö´ÐÐ | -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
|
| ¡¡ |
6L5LinuxÁªÃË
| 6L5LinuxÁªÃË execve£¨Ö´ÐÐÎļþ£© |
Ïà¹Øº¯Êý | fork£¬execl£¬execle£¬execlp£¬execv£¬execvp6L5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>6L5LinuxÁªÃË
|
¶¨Ò庯Êý | int execve(const char * filename,char * const argv[ ],char * const envp[ ]);6L5LinuxÁªÃË
|
º¯Êý˵Ã÷ | execve()ÓÃÀ´Ö´ÐвÎÊýfilename×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬µÚ¶þ¸ö²ÎÊýϵÀûÓÃÊý×éÖ¸ÕëÀ´´«µÝ¸øÖ´ÐÐÎļþ£¬×îºóÒ»¸ö²ÎÊýÔòΪ´«µÝ¸øÖ´ÐÐÎļþµÄл·¾³±äÁ¿Êý×é¡£6L5LinuxÁªÃË
|
·µ»ØÖµ | Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔÒò´æÓÚerrno ÖС£6L5LinuxÁªÃË
|
´íÎó´úÂë | EACCES6L5LinuxÁªÃË 1. ÓûÖ´ÐеÄÎļþ²»¾ßÓÐÓû§¿ÉÖ´ÐеÄȨÏÞ¡£6L5LinuxÁªÃË 2. ÓûÖ´ÐеÄÎļþËùÊôµÄÎļþϵͳÊÇÒÔnoexec ·½Ê½¹ÒÉÏ¡£6L5LinuxÁªÃË 3.ÓûÖ´ÐеÄÎļþ»òscript·ÒëÆ÷·ÇÒ»°ãÎļþ¡£6L5LinuxÁªÃË EPERM6L5LinuxÁªÃË 1.½ø³Ì´¦ÓÚ±»×·×Ùģʽ£¬Ö´ÐÐÕß²¢²»¾ßÓÐrootȨÏÞ£¬ÓûÖ´ÐеÄÎļþ¾ßÓÐSUID »òSGID λ¡£6L5LinuxÁªÃË 2.ÓûÖ´ÐеÄÎļþËùÊôµÄÎļþϵͳÊÇÒÔnosuid·½Ê½¹ÒÉÏ£¬ÓûÖ´ÐеÄÎļþ¾ßÓÐSUID »òSGID λԪ£¬µ«Ö´ÐÐÕß²¢²»¾ßÓÐrootȨÏÞ¡
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|