LinuxÒÁµéÔ°ÂÛ̳'s Archiver

xcch ·¢±íÓÚ 2007-1-17 19:39

systemº¯ÊýµÄÀ§»ó

1) ÎÒ¿´µ½systemº¯ÊýÔ´´úÂëÀïÊÇÕâôʵÏÖµÄ(ûÓÐÐźŴ¦Àí)
O!Uk6LA [code] U1}EW@:^
   int system(const char* cmdstring)
O8GUW:AZt    {
0nW1F'wbl7b     pid_t pid;&n m/Z*mF)r{;D0U.K
    int status;4a)fS^*jwz
  
)p a h2\3I]7V|e     if (cmdstring==NULL)"q5s7v#\Zs/jMO
     return 1;
t*hFp Rpe     if ( (pid=fork())<0 ) 8TgE-h Jj3})H M
      {status = -1;}
I-T*V$Kt%H{NC     else if (pid==0) @.Dxn_6xdf7U
    {7|Nl\6sK
     execl("/bin/sh", "sh", "-c", cmdstring, (char*)0);
;KB&D*@"V"b)M/o9T}6y      _exit(127);
M hg)\y0I)\/e)M u     }
?g+{)q K tb(z     else ifO] gW1y8h+?-_
    {
)v$bT/s r-X8Nr/p      while(waitpid(pid, &status, 0)<0)Oo}*iu4H4Er(IHC
     if(errno!=EINTR)
8B;u?p0y      {
.Wd u9G Z7wt       status=-1;1zV+x;|_ BGt.\7NQ
      break;!RbWv4XI4F"W
     }EF)b;s2d1f }IGt
    }
oxh&M}[ |+x     return status;
^kK"O)u5P3Y~   }
+M*S"k V+Y#G0C [/code]|`{qpC.g1a2G I4p
    ÊDz»ÊÇ˵,systemµÄµ÷ÓÃÖ»Äܵ÷ÓÃshellÃüÁî?ÒòΪËüµ÷ÓõÄÊÇ"/bin/sh"!D _| `L-AN
    ÁíÍâÕâÒ»ÐÐ:  _exit(127) Äܲ»Äܵ½´ï,ÒòΪԴ´úÂëÖÐûÓÐÈκÎÅжÏ,¾ÍËãexexl()²»³ö´íÒ²»á    µ½´ïÕâÒ»ÐаÉ..
5Y k V(NA y ^7P     »¹ÓÐÉÏÃæ´úÂëÖÐexecl()Õâ¾ä»°µ½µ×Éú³É¼¸¸ö½ø³Ì?
Ty1Uo'~8K     ÓÉÓÚÊǸտªÊ¼¿´»·¾³±à³Ì,ÕâЩ¶¼ÊDz»Àí½âµÄµØ·½,¼±ÅÎÖ¸½Ì

dearvoid ·¢±íÓÚ 2007-1-18 09:18

[QUOTE=xcch]
UlqQ2j     ÊDz»ÊÇ˵,systemµÄµ÷ÓÃÖ»Äܵ÷ÓÃshellÃüÁî?ÒòΪËüµ÷ÓõÄÊÇ"/bin/sh"
2?NiK'^,CPf,S^7_     ÁíÍâÕâÒ»ÐÐ:  _exit(127) Äܲ»Äܵ½´ï,ÒòΪԴ´úÂëÖÐûÓÐÈκÎÅжÏ,¾ÍËãexexl()²»³ö´íÒ²»á    µ½´ïÕâÒ»ÐаÉ..
C U+`#L!gI*~ H ]W(a     »¹ÓÐÉÏÃæ´úÂëÖÐexecl()Õâ¾ä»°µ½µ×Éú³É¼¸¸ö½ø³Ì?Q*j k.@K*|e-ug
    ÓÉÓÚÊǸտªÊ¼¿´»·¾³±à³Ì,ÕâЩ¶¼ÊDz»Àí½âµÄµØ·½,¼±ÅÎÖ¸½Ì[/QUOTE]
ea?$R7kZ7Dq [list=1]
k\iFb!PKF [*]Yes, system() Ö»Äܵ÷Óà shell ÃüÁî, ²»¹ýÕâ¶ùËù˵µÄ shell ÃüÁî²»½ö°üÀ¨ shell ×Ô¼º built-in µÄÃüÁî, Ò²°üÀ¨ external µÄÃüÁî±ÈÈç `/bin/ls' ÕâÖÖ
jV![dXh;uP ~ [*]exec() Èç¹û³É¹¦, »áÓÃеĽø³ÌÌæ»»µ±Ç°½ø³Ì, Òò´Ë _exit(127) ²»±»Ö´ÐÐ
%t#L6K,j c9m [*]exec() µÄÖ´Ðв»»á²úÉúµÚ¶þ¸ö½ø³Ì,~i(zj4Q){G
[/list]

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.