我对系统调用感到困惑__NR_execve.当我学习linux系统调用.我知道使用的正确方法execve是这样的:
char *sc[2];
sc[0]="/bin/sh";
sc[1]= NULL;
execve(sc[0],sc,NULL);
Run Code Online (Sandbox Code Playgroud)
然后,该功能execve将调用syscall()进入系统内核,把论据寄存器EAX,EBX,ECX和EDX.但是,如果我使用它仍然会成功
execve("/bin/sh",NULL,NULL);
Run Code Online (Sandbox Code Playgroud)
但是,如果我取代"/bin/sh"用"/bin/ls",它失败:
A NULL argv[0] was passed through an exec system call.
Run Code Online (Sandbox Code Playgroud)
我想知道为什么"/bin/sh"没有足够的参数可以成功执行而"/bin/ls"失败?