4

execve() 究竟是做什么的?我试过查看文档(http://linux.die.net/man/2/execve),但考虑到我对 linux 很陌生,而且这种编程方式没有多大意义。我想要做的是能够执行这个命令:

nc -l -p someport -e /bin/sh

我可以执行以下操作吗(其中 someport 是一个数字,例如 4444)

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

2 回答 2

17

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

您想要的机会是相当不错的,execvp或者execlp相反 - 您没有提到任何想要为孩子提供环境的事情,但从外观上看,您可能确实希望搜索路径以找到您正在使用的可执行文件。

于 2012-04-09T02:49:12.960 回答
6

正确用法是

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

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

于 2012-04-09T02:48:43.570 回答