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 < stdlib.h > #include < unistd.h > void main() { char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); } // gcc -o shellcode shellcode.c
本作品採用《CC 協議》,轉載必須註明作者和本文連結