Kee*_*eto 10 c integer-overflow argv argc
是否可以执行argc = 0的进程?我需要执行一个程序,但它的argc等于0是非常重要的.有没有办法做到这一点?我试图在命令行中放置2 ^ 32个参数,使其看起来好像argc = 0但是参数个数有一个最大限制.
您可以使用linux系统调用execve()。
int execve(const char *filename, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)
您可以传递可执行文件的文件名和空指针作为argv []来执行二进制文件,而argc将为零。
这是我的测试代码:
#include <stdio.h>
#include <unistd.h>
int main( void ) {
char *argv[]={ NULL };
execv( "./target", argv );
return ( 0 );
}
Run Code Online (Sandbox Code Playgroud)
而strace的结果是:
execve("./target", [], [/* 20 vars */]) = 0
Run Code Online (Sandbox Code Playgroud)
您可以使用envp []传递您定义的参数。
此外,您可以使用汇编语言来达到目标(argc == 0,但仍需要传递参数)。我假设您使用的是32位x86环境。
这个概念是:
内存结构如下所示:
+--------------------------------------------------+
| +----------------------------------|-----+
v v v------------------|-----|-----+
[arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0]
^
| (argv[] = NULL)
+--- envp
Run Code Online (Sandbox Code Playgroud)
我想知道您是否正在做Taesoo Kim教授(GATech)提供的课程的实验任务。课程链接:https : //tc.gtisc.gatech.edu/cs6265
还是黑客CTF(抢旗竞赛)问题?