无法使用 execve 传递第二个环境变量
Can't pass 2nd environment variable with execve
我想显示使用 execve() 函数作为参数传递给另一个进程的 2 个环境变量:
Main.c:
int main(){
char USERNAME[10];
strcpy(USERNAME, "USERNAME=");
for (int i=1;i<10;i++){
strcpy(USERNAME+i, "1");
}
char PATH[169];
strcpy(PATH, "PATH=");
for (int i=5;i<169;i++){
strcpy(PATH+i, "A");
}
char * newargv[] = {"./get","", (char*)0};
char * newenviron[] = {PATH,USERNAME};
execve("./get", newargv, newenviron);
return 0;
}
get.c:
int main()
{
const char* s = getenv("PATH");
printf("PATH :%s\n",s);
const char* s2 = getenv("USERNAME");
printf("USERNAME :%s\n",s2);
}
所以我编译 Main.c 到 Main 和 get.c 得到,并执行 Main,我得到这个输出:
PATH
:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
USERNAME :(null)
我不明白为什么 USERNAME 在这里是 NULL。
您在 newenviron
数组的末尾缺少空终止符。此外,您向每个字符串写入的字节数比分配给 space 的字节多(结尾的 \0 算作一个字符)。
糟糕,我删除了 USERNAME 选项卡的 "USERNAME=" 部分,因为循环从 1 而不是 9[=14= 开始]...
我想显示使用 execve() 函数作为参数传递给另一个进程的 2 个环境变量:
Main.c:
int main(){
char USERNAME[10];
strcpy(USERNAME, "USERNAME=");
for (int i=1;i<10;i++){
strcpy(USERNAME+i, "1");
}
char PATH[169];
strcpy(PATH, "PATH=");
for (int i=5;i<169;i++){
strcpy(PATH+i, "A");
}
char * newargv[] = {"./get","", (char*)0};
char * newenviron[] = {PATH,USERNAME};
execve("./get", newargv, newenviron);
return 0;
}
get.c:
int main()
{
const char* s = getenv("PATH");
printf("PATH :%s\n",s);
const char* s2 = getenv("USERNAME");
printf("USERNAME :%s\n",s2);
}
所以我编译 Main.c 到 Main 和 get.c 得到,并执行 Main,我得到这个输出:
PATH :AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA USERNAME :(null)
我不明白为什么 USERNAME 在这里是 NULL。
您在 newenviron
数组的末尾缺少空终止符。此外,您向每个字符串写入的字节数比分配给 space 的字节多(结尾的 \0 算作一个字符)。
糟糕,我删除了 USERNAME 选项卡的 "USERNAME=" 部分,因为循环从 1 而不是 9[=14= 开始]...