C语言 execve()函数

C/C++
422
0
0
2022-08-16

execve()是C语言中应用程序执行的函数。执行的应用程序可以是二进制程序,也可以是shell以及脚本文件。

execve()函数定义

引用的头文件:

#include <unistd.h>

函数原型:

int execve(const char *pathname, char *const argv[], char *const envp[]);

函数描述 [参考blog]

在execve()函数中,执行的程序由filename决定。filename必须是一个二进制的可执行文件,或者是一个脚本以#!格式开头的解释器参数参数。如果是后者,这个解释器必须是一个可执行的有效的路径名,但是不是脚本本身,它将调用解释器作为文件名。

argv是要调用的程序执行的参数序列,也就是我们要调用的程序需要传入的参数。

envp 同样也是参数序列,一般来说他是一种键值对的形式 key=value. 作为我们是新程序的环境。

注意,argv 和envp都必须以null指针结束。 这个参数向量和我们的环境变量都能够被我们的main函数调用,比如说我们可以定义为下面这个形式:

int main(int argc, char *argv[], char *envp[])

案例 – 执行shell

#include &lt stdlib.h &gt
#include &lt unistd.h &gt
void main() {
    char *name[2];
    name[0] = "/bin/sh";
    name[1] = NULL;
    execve(name[0], name, NULL);
}
// gcc -o shellcode shellcode.c