我想看看我在execve()函数中传递的环境变量是否真的被传递了,所以我编写了以下代码(Main.c):
int main(){
char PATH[4];
strcpy(PATH, "bin");
char * newargv[] = {"./get","", (char*)0};
char * newenviron[] = {PATH};
execve("./get", newargv, newenviron);
perror("execve");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(get.c):
int main()
{
const char* s = getenv("PATH");
printf("PATH :%s\n",s);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我执行Main.c发行的二进制文件时,得到以下输出:
路径:(空)
而我想看看
路径:bin
你有什么解释吗?
我没有清楚地理解LEAVE函数,它是这两条指令的缩写:
MOV ESP, EBP
POP EBP
Run Code Online (Sandbox Code Playgroud)
因此MOV ESP, EBP将ESP向下移动到EBP(堆栈的开始)的水平.
然后POP EBP,移动ESP指向的值并将其影响到EBP,并将ESP向下移动一步.
但我真的没有看到,这两个操作如何与离开函数的事实相关联(这是目的LEAVE).
你能帮我澄清一下吗?