[英]execve(…) does not execute program despite passing in PATH variable
[英]What does execve() do?
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);
execve
要求操作系统开始执行当前进程中的不同程序。
您很可能想要execvp
或execlp
- 您没有提到任何关于想要为孩子提供环境的事情,但从外观上看,您可能确实希望搜索路径以找到您正在使用的可执行文件.
正确的用法是
extern char * const environ[];
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL};
execve("/usr/bin/nc", command, environ);
您必须使用完整的路径名,而不是诸如"nc"
类的短名称(更准确地说:不进行PATH
搜索,路径名必须是实际存在的文件),并且您必须事先将 arguments 拆分为单独的字符串。 您还需要以某种方式传播环境,通过上面代码段中提到的外部environ
或从main()
的第三个参数获得; 后者稍微更符合标准,但根据需要传递可能会更痛苦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.