execve()做什么?

Nos*_*tap 3 c c++ linux execve

execve()究竟做了什么?我已经尝试过查看文档(http://linux.die.net/man/2/execve),但鉴于我对linux很新,这种编程方式并没有多大意义.我想要做的是能够执行此命令:

nc -l -p someport -e /bin/sh
Run Code Online (Sandbox Code Playgroud)

我可以做类似以下的事情(其中someport是一个数字,如4444)

char *command[2];
command[0] = "nc -l -p someport -e /bin/sh"
execve(command[0], name, NULL);
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 15

execve 用新进程替换当前进程,运行您指定为第一个参数的命令.

机会是相当不错的,你想execvpexeclp代替-你不是想为孩子的环境中提到什么,而是从事物的外表,你可能想要做的路径搜索以找到您所使用的可执行文件.


gee*_*aur 5

正确使用是

extern char * const environ[];
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL};
execve("/usr/bin/nc", command, environ);
Run Code Online (Sandbox Code Playgroud)

您必须使用完整路径名,而不是短名称"nc"(更确切地说:不进行PATH搜索,路径名必须是实际的现有文件),并且必须事先将参数拆分为单独的字符串.您还需要以某种方式传播环境,或者通过environ上面代码段中提到的extern 或者从第三个参数获得main(); 后者稍微有点标准,但根据需要可能会更加痛苦.