小编Arv*_*Hsu的帖子

为什么execve系统调用运行"/ bin/sh"而没有任何argv参数,而不是"/ bin/ls"?

我对系统调用感到困惑__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,ECXEDX.但是,如果我使用它仍然会成功

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"失败?

c linux glibc system-calls shellcode

11
推荐指数
1
解决办法
4385
查看次数

标签 统计

c ×1

glibc ×1

linux ×1

shellcode ×1

system-calls ×1