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 < stdlib.h >
#include < unistd.h >
void main() {
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
execve(name[0], name, NULL);
}
// gcc -o shellcode shellcode.c