일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 시스템
- write up
- radare2
- wargame
- css
- 어셈블리어
- 컴퓨터구조
- Pwnable.kr
- px4
- 리눅스 커널
- 리눅스커널
- C언어
- Bandit
- 워게임
- 시그널
- 리눅스
- 커널
- 알고리즘
- C++
- 드론
- 취약점
- 시스템프로그래밍
- pwncollege
- 시스템해킹
- Leviathan
- 프로그래밍
- pwn.college
- 시스템 프로그래밍
- kernel
- 리버싱
Archives
- Today
- Total
Computer Security
#31 프로그램 실행과 종료처리 (실습) 본문
반응형
fork를 한 이후에 exec을 통해서 외부에 다른 프로그램을 실행하고 child process가 종료되면 종료코드를 작성해보자.
1. 이전에 작성했던 fork.c 를 exec.c 로 카피해주자.
2. child process인경우 execl() 명령어를 통해 다른 명령을 실행해보자.
int execl(const char *path, const char *arg, .../* (char *) NULL */);
ls 명령은 /bin/ls 에 있다. execl을 이용해서 ls를 출력해보자.
i) path : "/bin/ls"
ii) const char *arg : "ls", "-al"
iii) NULL
iv) 예외처리 해준다.
3. wait() API를 이용해서 child process가 종료될때까지 기다리자.
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *wstatus);
파라미터
- wstatus : child process의 종료 상태
반환 값
- 성공 시 : terminated 된 자식 프로세스의 pid
- 실패 시 : -1
i) int exit_status : 변수 선언
ii) pid = wait(&exit_status) : child process가 종료될때까지 기다리고 종료되면 exit_status변수에 종료상태의 값이 넣어진다.
iii) 예외 처리한다. 정상종료 됐을경우 return 값이 무엇인지 출력하게해준다.
4. 전체 코드이다.
5. gcc 컴파일 한 뒤, ./exec를 하기전 ./fork 를 먼저 살펴보자.
i) original process= parent process
ii) test function을 호출해 child process pid가 출력되었다.
6. ./exec를 실행시켜 보자.
i) original process pid = 5256 (parent 역할)
ii) child pid = 5257
iii) test function이 출력됐다.
iv) wait해서 blocking 상태가 되어 기다렸는데, 그상황에서 child proces가 뜨니 ls -al 명령이 실행됐다!
v) child 5257이 return 0(성공
반응형
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#33 CPU 구조 (Processor affinity 실습) (0) | 2022.10.08 |
---|---|
#32 CPU 구조 (2) | 2022.10.07 |
#30 프로그램 실행과 종료처리 (0) | 2022.10.05 |
#29 프로세스 개념, 프로세스 생성(실습) (2) | 2022.10.04 |
#28 프로세스 개념, 프로세스 생성 (0) | 2022.10.03 |
Comments