小编juR*_*s75的帖子

找不到传递给execve函数的环境

我想看看我在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

你有什么解释吗?

c execve

4
推荐指数
1
解决办法
218
查看次数

需要对汇编语言中的LEAVE指令进行一些解释

我没有清楚地理解LEAVE函数,它是这两条指令的缩写:

MOV ESP, EBP
POP EBP
Run Code Online (Sandbox Code Playgroud)

因此MOV ESP, EBP将ESP向下移动到EBP(堆栈的开始)的水平.

然后POP EBP,移动ESP指向的值并将其影响到EBP,并将ESP向下移动一步.

但我真的没有看到,这两个操作如何与离开函数的事实相关联(这是目的LEAVE).

你能帮我澄清一下吗?

x86 assembly

2
推荐指数
1
解决办法
1290
查看次数

标签 统计

assembly ×1

c ×1

execve ×1

x86 ×1