章节大纲

  • 在本任务中,我们研究如果通过 system() 函数来执行新程序,环境变量会受到什么影响。 system() 函数用于执行一个命令,但不同于直接执行命令的 execve(),system() 实际执行的是 "/bin/sh -c command",即它会先执行 /bin/sh,然后让 shell 来执行命令。

    如果查看 system() 函数的实现,可以发现它使用 execl() 来执行 /bin/sh,execl() 会调用 execve() ,同时将环境变量传递给这个系统调用。因此,使用 system() 时,调用进程的环境变量会传递给新程序 /bin/sh。请编译并运行以下程序以验证这一点。

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      system("/usr/bin/env");
      return 0 ;
    }