是否可以执行argc = 0的进程?我需要执行一个程序,但它的argc等于0是非常重要的。有没有办法做到这一点? 我试图把2^32参数放在命令行中,这样看起来就好像argc = 0一样,但是参数的数量有一个最大限制。执行argc = 0的进程
回答
你可以写与不argv的产卵/高管的其他程序,如C程序:
#include <spawn.h>
#include <stdlib.h>
int main(int argc, char** argv, char** envp)
{
pid_t pid;
char* zero_argv[] = {NULL};
posix_spawn(&pid, "./that_app", NULL, NULL, zero_argv, envp);
int status;
waitpid(&pid, &status, NULL);
return 0;
}
这不会是未定义的行为? – user
@user:不是。该标准将'argc'和'argv [0] == 0'视为非常好的情况。看[这个问题](http://stackoverflow.com/questions/2794150/when-can-argv0-have-null)。 –
你可以使用Linux系统调用的execve()。
int execve(const char *filename, char *const argv[], char *const envp[]);
您可以传递的可执行文件名和一个空指针作为的argv []执行二进制和的argc将为零。
这是我的测试代码:
#include <stdio.h>
#include <unistd.h>
int main(void) {
char *argv[]={ NULL };
execv("./target", argv);
return (0);
}
而且strace的结果是:
execve("./target", [], [/* 20 vars */]) = 0
你可以使用envp []传给你反正定义的参数。此外,你可以使用汇编语言来达到你的目标(argc == 0,但你仍然需要传递参数)。我假设你使用的是32位x86环境。
的概念是:
- 店0x0B中($ SYS_execve)为%EAX
- 放的argv的地址[]到%EBX
- 放envp []的地址转换成%ecx
- 然后用INT 0x80的做一个系统调用
的存储结构如下图所示:
+--------------------------------------------------+
| +----------------------------------|-----+
v v v------------------|-----|-----+
[arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0]
^
| (argv[] = NULL)
+--- envp
我想知道,如果你正在做的教授提供的课程的实验任务Taesoo Kim(GATech) 当然链接:https://tc.gtisc.gatech.edu/cs6265
或者它是一个黑客CTF(抓旗竞赛)问题?
这不提供问题的答案。一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你将能够[评论任何职位](http://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/15041212) –
已修复,谢谢。 – vegafish
- 1. 过程argc和主()
- 2. MPI:进程0两次执行其代码
- 3. 处理执行的进程
- 4. 执行多线程进程
- 5. 远程进程执行
- 6. 从主进程执行多个进程
- 7. argc和argv没有运行
- 8. AngularJS - Karma(e2e):执行0的0错误
- 9. 命令行参数和argc
- 10. 使用argc和argv分析命令行
- 11. 执行C++程序的多个进程
- 12. 拦截进程执行
- 13. C++执行外部进程
- 14. 执行进程一致
- 15. java执行进程替换
- 16. Java - 如何执行进程
- 17. 什么进程执行rpc:cast?
- 18. Django +执行异步进程?
- 19. 执行进程通信
- 20. Linux进程执行历史
- 21. 从.NET执行Cygwin进程?
- 22. 测试ProcessStartInfo进程执行
- 23. argc和argv未运行
- 24. 如何检查Windows可执行文件是否在Session 0进程中运行?
- 25. 无法执行xAxis [0] .setCategories&series [0] .setData
- 26. lodash执行返回值=== 0?值:0
- 27. uDeploy进程独立执行,但与其他进程分组时不执行...
- 28. 命令行参数not incrementinc argc
- 29. 的argc argv的参数 - (游戏编程)
- 30. 在程序执行时进行输入
你究竟想要达到什么目的?我的意思是,也许还有另一种更简单的方法来做到这一点。 – Aziz
什么是您的操作系统,以及您如何执行此过程?它是用户激活的还是来自另一个进程? – ibid
难道你不能只是'argc = 0'作为main()的第一行吗? –