execve() 有什么作用

What does execve() do?

本文关键字:什么 作用 execve      更新时间:2023-10-16

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);

execve要求操作系统在当前进程中开始执行不同的程序。

你想要execvpexeclp的可能性相当不错 - 你没有提到任何想要为孩子提供环境的事情,但从事情的外观来看,你可能确实希望搜索路径以找到你正在使用的可执行文件。

正确的用法是

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