为什么execve忽略环境参数?

时间:2014-05-20 01:17:47

标签: c path environment-variables

假设我们有program1:

int main(void) {
    char *env[2];

    env[0] = "PATH=/";
    env[1] = NULL;

    execve("/program2", NULL, env);

    exit(0);
}

我们还有program2:

int main(void) {
    exit(0);
}

调试它,PATH在执行的新进程(program2)中实际上没有被修改。

1 个答案:

答案 0 :(得分:0)

  

调试它,在新进程中实际上没有修改PATH   (program2)被执行。

事实并非如此。请注意,p environ不起作用,而从x 0x8049650获得的environ@@GLIBC_2.0(地址info var environ)确实有效:

(gdb) p environ
$1 = (char **) 0x0
(gdb) p/x &environ
$2 = 0xf7fbfd44
(gdb) x 0x8049650
0x8049650 : 0xffffdf18
(gdb) x/s **0x8049650
0xffffdfe8:      "PATH=/"