【发布时间】:2015-05-10 09:27:56
【问题描述】:
我必须填写以下参数:
int execve(const char *filename, char *const argv[], char *const envp[]);
如果我执行这个程序:
#include <unistd.h>
int main() {
char *args[2];
args[0] = "/bin/sh";
args[1] = NULL;
execve(args[0], args, NULL);
}
shell 按预期正确生成。
我的问题是,如果我像这样将 NULL 作为第二个参数传递,shell 也会正确生成:
#include <unistd.h>
int main() {
char *args[2];
args[0] = "/bin/sh";
args[1] = NULL;
execve(args[0], NULL, NULL);
}
那么使用 args 向量(带有“/bin/sh”+ NULL)作为第二个参数而不是 NULL 的目的是什么?
【问题讨论】:
-
在这种情况下,您没有传递任何参数,因此没有区别。您可以选择在
args中传递一些参数。 -
那么,为什么在我看到的所有示例中,人们习惯将 /bin/sh + NULL 作为 arg 传递? arg参数直接设为NULL更容易理解。
-
可能是因为是一个例子,明白了如果我传递一些参数,必须有一个NULL作为字符串终止符?
-
自己编写一个打印出参数的 C 程序,如果你用你的两个示例程序调用它,你应该会看到不同。