传递给execve的参数会发生什么变化?

时间:2016-02-14 20:02:17

标签: c exec system

我理解调用execve将完全擦除调用程序的文本,数据,bss和堆栈,并将其替换为被调用程序的文本,数据,bss和堆栈。

我的问题是:

如果我们将在堆上分配的char数组作为其参数之一传递给execve会发生什么? char *本身驻留在堆栈上,但所有单个chars都在堆上。难道不会擦除这些数据吗?新计划将如何收到其论点?

1 个答案:

答案 0 :(得分:4)

execve系统调用将复制args并将它们放入新程序的地址空间。

你可以在1586号线看到这个

1581         bprm->exec = bprm->p;
1582         retval = copy_strings(bprm->envc, envp, bprm);
1583         if (retval < 0)
1584                 goto out;
1585 
1586         retval = copy_strings(bprm->argc, argv, bprm);
1587         if (retval < 0)
1588                 goto out;
1589 
1590         retval = exec_binprm(bprm);
1591         if (retval < 0)
1592                 goto out;

(来自http://lxr.free-electrons.com/source/fs/exec.c