execve执行bin\sh
时间: 2023-07-04 11:13:12 浏览: 130
execve是一个系统调用函数,用于在UNIX系统中执行一个新的程序。它的原型如下:
```
int execve(const char *filename, char *const argv[], char *const envp[]);
```
其中,filename参数是要执行的程序的路径名,argv参数是一个指向参数字符串的指针数组,envp参数是一个指向环境变量字符串的指针数组。
如果你想在UNIX系统中执行/bin/sh,你可以使用以下代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char *args[] = {"/bin/sh", NULL};
execve(args[0], args, NULL);
perror("execve failed");
exit(EXIT_FAILURE);
}
```
这个程序将执行/bin/sh,并将其作为新的进程启动。在这个例子中,我们使用一个名为args的字符串数组来存储要执行的程序的路径名和参数。我们将它传递给execve函数,它将运行/bin/sh shell。如果execve函数返回错误,程序将输出错误消息并退出。
相关问题
用syscall执行system(\bin\sh)
可以使用以下代码在Linux x86_64操作系统上使用syscall()系统调用执行system("/bin/sh")命令:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/syscall.h>
int main() {
char *const args[] = {"/bin/sh", NULL};
syscall(SYS_execve, "/bin/sh", args, NULL);
return 0;
}
```
其中,`SYS_execve`是`execve()`系统调用的调用号,`"/bin/sh"`是要执行的程序路径,`args`是传递给程序的命令行参数。
讲一下system(/bin/sh)的原理和执行过程以及函数的底层逻辑
system("/bin/sh")是一个C语言函数,它可以在Linux系统中执行shell命令。当程序调用system("/bin/sh")时,它会创建一个新的进程,并在该进程中执行/bin/sh程序。这个新进程会继承调用进程的环境变量和文件描述符等信息。
在执行/bin/sh程序时,它会读取用户输入的命令,并执行相应的操作。如果用户输入的是一个可执行文件的路径,则/bin/sh会调用execve()函数来执行该文件。如果用户输入的是一个shell命令,则/bin/sh会调用相应的shell内置命令或者外部命令来执行该命令。
函数的底层逻辑是通过调用Linux系统调用来实现的。具体来说,system()函数会调用fork()函数来创建一个新的进程,然后在新进程中调用execve()函数来执行/bin/sh程序。在执行完/bin/sh程序后,新进程会调用exit()函数来退出。
总之,system("/bin/sh")函数的原理和执行过程是通过创建新进程并在其中执行/bin/sh程序来实现的,它的底层逻辑是通过调用Linux系统调用来实现的。