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);
正确的用法是
extern char * const environ[]; char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL}; execve("/usr/bin/nc", command, environ);
您必须使用完整的路径名,而不是像"nc"
这样的短名称(更确切地说,没有PATH
搜索完成,路径名必须是实际存在的文件),并且必须事先将参数拆分成单独的字符串。 你还需要以某种方式传播环境,或者通过上面代码片段中提到的extern environ
或者从main()
的第三个参数获得; 后者稍微更加标准化,但可能会更加痛苦。
execve
用新进程替换当前进程,运行您指定的命令作为其第一个参数。
你想要execvp
或execlp
机会是相当不错的 – 你没有提到任何想要为孩子提供环境的东西,但从外观上看,你可能希望路径搜索找到你正在使用的可执行文件。