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() 的第三个参数获得;后者稍微更符合标准,但根据需要传递可能会更痛苦。

关于c++ - execve() 有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10068327/

10-11 08:49