Is it possible to execute a process whose argc = 0? I need to execute a program but it is extremely important for its argc to be equal to 0. Is there a way to do that? I tri
You may use linux system call execve().
int execve(const char *filename, char *const argv[], char *const envp[]);
You may pass the filename of executable and a null pointer as the argv[] to execute the binary and the argc will be zero.
It is my test code:
#include
#include
int main( void ) {
char *argv[]={ NULL };
execv( "./target", argv );
return ( 0 );
}
And the strace result is:
execve("./target", [], [/* 20 vars */]) = 0
You could use envp[] to pass the arguments you defined anyways.
Furthermore, you could use assembly language to reach your goal (argc == 0 but you still need to pass arguments). I assume that you are using a 32-bits x86 environment.
The concept is that:
The memory structure is shown below:
+--------------------------------------------------+
| +----------------------------------|-----+
v v v------------------|-----|-----+
[arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0]
^
| (argv[] = NULL)
+--- envp
I am wondering that if you were doing the lab assignment of the course provided by Prof. Taesoo Kim (GATech). Course Link: https://tc.gtisc.gatech.edu/cs6265
Or is it a hacker CTF (catch-the-flag contest) problem?