C語言 execve()函式

冰雪封存的記憶發表於2022-01-09

execve()是C語言中應用程式執行的函式。執行的應用程式可以是二進位制程式,也可以是shell以及指令碼檔案。

引用的標頭檔案:
#include <unistd.h>
函式原型:
int execve(const char *pathname, char *const argv[], char *const envp[]);

在execve()函式中,執行的程式由filename決定。filename必須是一個二進位制的可執行檔案,或者是一個指令碼以#!格式開頭的直譯器引數引數。如果是後者,這個直譯器必須是一個可執行的有效的路徑名,但是不是指令碼本身,它將呼叫直譯器作為檔名。
argv是要呼叫的程式執行的引數序列,也就是我們要呼叫的程式需要傳入的引數。

envp 同樣也是引數序列,一般來說他是一種鍵值對的形式 key=value. 作為我們是新程式的環境。

注意,argv 和envp都必須以null指標結束。 這個引數向量和我們的環境變數都能夠被我們的main函式呼叫,比如說我們可以定義為下面這個形式:

int main(int argc, char *argv[], char *envp[])
#include &lt stdlib.h &gt
#include &lt unistd.h &gt
void main() {
    char *name[2];
    name[0] = "/bin/sh";
    name[1] = NULL;
    execve(name[0], name, NULL);
}
// gcc -o shellcode shellcode.c
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章