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-2,c-3,linux,execve 来源: https://codeday.me/bug/20190712/1439185.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。