일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시그널
- Pwnable.kr
- css
- C언어
- 어셈블리어
- 드론
- px4
- pwncollege
- wargame
- Leviathan
- 리눅스커널
- 시스템해킹
- 컴퓨터구조
- 시스템 프로그래밍
- 알고리즘
- 시스템프로그래밍
- Bandit
- 리눅스
- kernel
- C++
- pwn.college
- 커널
- 리눅스 커널
- 리버싱
- 워게임
- 시스템
- radare2
- write up
- 취약점
- 프로그래밍
- Today
- Total
Computer Security
#38 기본 시그널 처리 2 본문
시그널 처리 설정
typedef void (*sighandler_t) (int);
sighandler_t signal (int signum, sighandler_t handler);
파라미터
- signum : 처리 대상 시그널 번호
- handler : 시그널 핸들러
- SIG_IGN : 해당 시그널을 무시 처리 한다.
- SIG_DFL : 해당 시그널을 기본 동작 처리 한다.
- 그외 사용자 정의 시그널 핸들러
반환 값
- 성공 시 이전 시그널 핸들러
- 실패 시 SIG_ERR
재진입성(reentrant)
Reentrant function
- 실행이 끝나기 전에 중단되었다가 재개 되엇을 때에도 정삭적으로 수행을 마치는 함수
시그널 핸들러와 reentrant와의 관계
- 시그널 핸들러가 호출되는 시점에 어떤 코드를 실행 중이었는지 알 수 없다.
- 특히, 재진입이 불가능한 API를 사용하면 데이터가 망가질 수 잇다.
그렇기에 시그널 핸들러는
- 재진입이 가능한 함수만 사용해야 한다.
- 글로벌 데이터를 수정할 때 조심해야 한다.
- 필요한 경우 시그널 블록 처리 -> 데이터 처리 -> 시그널 언블록 처리 하여 데이터를 안전하게 다뤄야 한다.
시그널 보내기
int kill (pid_t pid, int sig);
파라미터
- pid : 시그널 송신 대상 지정
- 1 이상 : 프로세스 ID
- 0 : 프로세스 그룹 전체
- -1 : 권한 내의 모든 프로세스
- -1 미만 : 프로세스 그룹 아이디가 (-pid)인 프로세스 그룹 전체
- sig : 보낼 시그널 번호
- 단, 0인 경우 보내지는 않고, process 유무 및 권한 판단 수행
반환 값
- 하나 이상의 프로세스에게 송신 시 0 리턴
- 실패 시 -1
시그널 블록
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
파라미터
- how
- SIG_BLOCK : blocked signal에 추가
- SIG_UNBLOCK : 현재 blocked signal에서 제외
- SIG_SETMASK : set 변수를 blocked signal로 설정
- set : 설정할 sigset
- oldset : 기존 설정되어 있던 sigset
반환 값
- 성공 시 0
- 실패 시 -1
시그널 모음 설정
int sigemptyset (sigset_t *set);
- sigset 변수를 empty set으로 설정(아무런 시그널 설정되어 있지 않음)
int sigfillset (sigset_t *set);
- sigset 변수에 모든 시그널을 설정
int sigaddset (sigset_t *set, int signum);
- sigset 변수에 특정 시그널을 추가
int sigdelset (sigset_t *set, int signum);
- sigset 변수에서 특정 시그널을 삭제
int sigismember (const sigset_t *set, int signum);
- sigset 변수에서 특정 시그널이 포함되어 있는지 확인
- 포함시 1 리턴
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#40 고급 시그널 처리 (0) | 2022.12.01 |
---|---|
#39 기본 시그널 처리 (실습) (0) | 2022.10.14 |
#37 기본 시그널 처리 1 (0) | 2022.10.12 |
#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2) (2) | 2022.10.11 |
#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1) (0) | 2022.10.10 |