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);
答案 0 :(得分:15)
execve
用新进程替换当前进程,运行您指定为第一个参数的命令。
你想要execvp
或execlp
的机会相当不错 - 你没有提到任何关于想要为孩子提供环境的事情,而是从你可能想要的东西看起来搜索路径以查找您正在使用的可执行文件。
答案 1 :(得分:5)
正确使用
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()
的第三个参数获得;后者稍微有点标准祝福,但根据需要传递可能会更痛苦。