execl()
int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);
디렉토리와 파일 이름이 합쳐진 절대 경로로써 파일 이름을 입력해 주어야 한다.
그리고 argv[n]의 값을 수정할 수 있다.
e.g. execl("/bin/sh", "/bin/sh", NULL);
execle()
int execle( const char *path, const char *arg ,..., char * const envp[]);
execl()과 같지만 환경변수까지 설정할 수 있는 함수이다.
다른건 execl()과 같음.
execlp()
int execlp( const char *file, const char *arg, ...);
환경변수 PATH에 등록된 모든 디렉토리에 있는 프로그램을 실행하므로, 절대 경로를 입력해줄 필요가 없다.
명령어만 입력하면 된다.
e.g. execlp("ls", "ls", NULL);
execv()
int execv( const char *path, char *const argv[]);
execl() 계열과 다르게 argv인자를 배열로 받는다.
execl 계열이 인자를 하나씩 입력해주어야 했따면, exev 는 배열로 지정하여
배열의 첫번째 주소만 넣어주는 것. (null이 나올때 까지 읽음)
execve()
int execve (const char *filename, char *const argv [], char *const envp[]);
execv와 동일하지만 환경변수도 배열로 받아 설정할 수 있다.
셸코드에 주로 많이 쓰는 함수
execvp()
int execve (const char *filename, char *const argv []);
execv가 모든 경로를 다 포함해주어야 하는 반면 파일 이름만 적으면 실행된다.
execlp 와 같은 거다.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
od(octal dump) (0) | 2021.04.18 |
---|---|
C언어 컴파일 과정 (0) | 2021.04.18 |
시스템 콜 (System Call) (0) | 2021.04.18 |
리눅스 find 명령어 활용 (0) | 2021.04.18 |
SFX (Self-extracting file) Archive (0) | 2021.04.18 |