일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- wargame
- 시스템해킹
- 프로그래밍
- radare2
- px4
- 커널
- C++
- pwncollege
- 드론
- 시스템 프로그래밍
- 리버싱
- 시그널
- 어셈블리어
- write up
- 시스템
- 시스템프로그래밍
- Bandit
- 리눅스커널
- C언어
- pwn.college
- css
- 취약점
- 알고리즘
- 워게임
- 리눅스
- Pwnable.kr
- 컴퓨터구조
- 리눅스 커널
- kernel
- Leviathan
- Today
- Total
목록정보보안 (179)
Computer Security
epoll 리눅스에서 select의 단점을 보완하여 사용할 수 있도록 만든 I/O통지 모델이다. 파일 디스크립터를 사용자가 아닌 커널이 관리를 하며, 그만큼 CPU는 계속해서 파일 디스크립터의 상태 변화를 감시할 필요가 없다. select처럼 어느 파일 디스크립터에 이벤트가 발생하였는지 찾기 위해 전체 파일디스크립터에 대해서 순차검색을 위한 FD_ISSET 루프를 돌려야 하지만, Epoll의 경우 이벤트가 발생한 파일 디스크립터들만 구조체 배열을 통해 넘겨주므로 메모리 카피에 대한 비용이 줄어든다. epoll 과정 1. epoll instance 를 생성한다 2. epoll_ctl(ADD) API를 통해서 감시할 fd들을 ADD해준다. 3. epoll_wait()라는 API를 통해서 이벤트를 기다린다. ..
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는 파일 ..
한 application에서 여러 fd에 대해 read를 하려면? 1. polling with non-blocking mode 2. multi-thread 3. I/O Multiplexing 2. multi-thread 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것 하나의 프로그램에 동시에 여러개의 일을 수행할수 있도록 해주는 것이다. 3. I/O Multiplexing I/O Multiplexing API :select()/poll()/epoll() 여러개의 fd들이 있었을 때, API에 등록하고(이거에 대해 반응할 것이다!) 하나의 프로세스&쓰레드가 API를 call해서 전체 fd를 한꺼번에 감시한다. 만약 어떤 특정..
디렉토리 두개를 지정해서 각 디렉토리 안에 파일이 생성되거나 삭제될때 이벤트를 호출해서 화면에 출력하는 예제를 작성 해보자. 1. 기본적인 뼈대를 구성 해준다. 2. inotify객체를 생성한다. #include int inotify_init(void); i) inotify 객체를 생성하기 위해 fd를 하나 만든다. ii) inotify_init이라는 API로 객체를 생성한다. iii) 예외처리 해준다. 3. inotify 객체에 watch를 걸어준다. #include int inotify_add_watch(int fd, const char *pathname, uint32_t mask); i) inotify_add_watch라는 API를 통해 watch를 추가한다. ii) mask에 파일이 CREATE ..