일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pwncollege
- Pwnable.kr
- pwn.college
- 시스템
- 리눅스
- 리눅스커널
- Leviathan
- radare2
- write up
- 프로그래밍
- 워게임
- 리눅스 커널
- 취약점
- 알고리즘
- 리버싱
- px4
- 시스템 프로그래밍
- kernel
- 시그널
- 어셈블리어
- C언어
- C++
- Bandit
- 시스템프로그래밍
- 드론
- 시스템해킹
- css
- wargame
- 커널
- 컴퓨터구조
- Today
- Total
목록리눅스커널 (10)
Computer Security
select API를 이용해서 inotify fd 와 stdin fd에 대해서 read 이벤트를 감시하고있다가 이벤트가 발생하면 해당 fd에 가서 정보를 읽어오자. 이전에 작성했던 inotify 기능을 작성했던 코드에 stdin fd에대해 읽어오는 부분 + select로 I/O Multiplexing 하는 부분을 붙혀서 코드를 작성 해보자. 1. 이전에 작성했던 inotify.c 파일을 select.c로 카피한다. 아래는 inotify.c 코드이다. 메인함수에서부터 inotify객체를 생성하고 watch를 2개 추가한 뒤, while 루프를 해서 read 를 직접적으로 호출하는 예제였다. 우리는 stdin 에대해서도 I/O multiplexing을 해야하니 코드를 수정해야한다. stdin의 fd는 파일 ..
목표 file 을 read API 를 통해서 데이터를 읽는데, read 데이터가 없을 경우에, Blocking mode 와 Non-blocking mode가 각각 어떻게 동작하는지와 fcntl API를 이용해서 file의 Blocking mode 와 Non-blocking mode를 변환하는 예제를 작성 해보자. Blocking mode 1. 기본 뼈대를 만들어 준다. 프로세스가 하나 생성되면 기본적으로 3개의 fd 가 열린다. 0번 fd : standard in (STDIN_FILENO) 1번 fd : standard out (STDOUT_FILENO) 2번 fd : standard error (STDERR_FILENO) 2. 이미 열린상태이기에 open API를 호출할 필요는 없고, STDIN fd의..
read API가 호출을 했을때, 읽을 데이터가 없는 경우에 Blocking operation 과 Non-Blocking operation의 차이가 발생한다. Blocking operation 요청한 작업을 마칠 때까지 계속 대기(Blocking)한다. 즉시 return한다. return 값을 받아야 끝난다. Thread 관점 : 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용/대기 한다. 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다면 blocking이다. Non-Blocking operation 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다. 즉시 리턴하지 않는다. (일을 못하게 막는..
mmap API를 이용해서 파일의 내용을 메모리에 매핑 해보자. 시작 하기 앞서, 이전에 read API 를 하면서 작성했던 예제를 먼저 다시 살펴보자. dump_info 부분을 보면 모든 내용을 출력하는 코드가 있는데, 이 부분을 mmap API를 이용해서 내용을 읽어서 처리할 수 있도록 해보자. 1. read.c 부분을 우리가 실습할 mmap 디렉토리 안에 read_mmap.c 이름으로 카피해서 넣어준다. 2. dump_info 부분을 mmap 을 이용할 것이기 때문에, dump_info 부분을 지워준다. 3. open 명령어를 이용해서 person_info 파일을 열어주고, 예외처리 해준다. 4. mmap API를 이용해서 매핑 해준다. #include void *mmap(void *addr, si..