execve() 有什么作用
What does execve() do?
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
要求操作系统在当前进程中开始执行不同的程序。
你想要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
搜索,路径名必须是实际的现有文件),并且必须事先将参数拆分为单独的字符串。 您还需要以某种方式传播环境,无论是通过上面代码片段中提到的 extern environ
,还是从 main()
的第三个参数获得的;后者稍微更符合标准,但根据需要传递可能更痛苦。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用