execve()到底做了什么?我试着看过文档(http://linux.die.net/man/2/execve),但考虑到我对linux和这种编程非常陌生,这对我来说没有多大意义。我想要做的是能够执行这个命令:
nc -l -p someport -e /bin/sh我可以做下面这样的事情吗(其中的某个端口是一个数字,比如4444)
char *command[2];
command[0] = "nc -l -p someport -e /bin/sh"
execve(command[0], name, NULL);发布于 2012-04-09 10:48:44
正确的用法是
extern char * const environ[];
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL};
execve("/usr/bin/nc", command, environ);您必须使用完整的路径名,而不是像"nc"这样的短名称(更准确地说:不进行PATH搜索,路径名必须是实际存在的文件),并且必须事先将参数拆分成单独的字符串。您还需要以某种方式传播环境,要么通过上述代码片段中提到的外部environ,要么从main()的第三个参数获得;后者稍微更符合标准,但根据需要传递可能会更痛苦。
发布于 2012-04-09 10:49:13
execve使用一个新进程替换当前进程,运行您指定为其第一个参数的命令。
您很可能希望使用execvp或execlp --您没有提到要为孩子提供环境,但是从外观上看,您可能确实希望搜索路径来找到您正在使用的可执行文件。
https://stackoverflow.com/questions/10068327
复制相似问题