리눅스 커널 익스플로잇을 공부하기 위해 나름대로 정리한 글입니다.
틀린 내용이 있을 수 있습니다.
리눅스는 모놀리딕 아키텍처가 아닌 모듈로 구성되어 있기 때문에
성능은 낮은 대신, 유지 보수가 용이하다.
이 말인 즉슨 무언가를 추가하고 제거하는 것이
USB를 꽂았다 제거하듯이 간편하다는 의미이다.
리눅스 커널 아키텍처는 다음과 같다.
유저는 시스템 콜로 커널에게 작업을 요청하게 된다. (인터럽트 발생)
그럼 커널은 요청 받은 작업을 수행하고 유저에게 결과를 리턴해준다.
리눅스 커널은 모든 것들을 파일로 인식하고 처리한다고 했다.
이는 장치(device)도 예외는 아니다.
장치 제어를 위해 필요한 것이 바로 장치 드라이버(device driver)이다.
장치 드라이버는 하드웨어의 모든 기능들을 수행할 수 있도록 도와주는 역할을 한다.
이를 통해 프로그래머는 하드웨어에 대해 공부하지 않고도
하드웨어를 사용하는 프로그램을 만들 수 있다.
추가로 리눅스는 VFS라는 계층을 통해 다양한 파일시스템을 사용할 수 있게 도와준다.
디바이스 드라이버는 크게 3가지로 나뉜다.
1. 문자 장치(Character devices)
파일과 같은 바이트 스트림으로 액세스할 수 있다.
일반적으로 최소한 열기(open), 닫기(close), 읽기 및 쓰기(read and write) 시스템 콜을 구현한다.
문자 장치와 일반 파일의 차이점
일반 파일(Regular file): 항상 데이터를 앞뒤로 이동할 수 있다.
문자 장치(Char devices): 데이터 채널일 뿐이며 순차적으로만 액세스할 수 있다.
2. 블록 장치(Block devices)
파일 시스템을 호스팅할 수 있는 장치이다.
일반적으로 512바이트인 하나 이상의 전체 블록을 전송하는 I/O 작업만 처리할 수 있다.
3. 네트워크 인터페이스(Network interfaces)
커널의 네트워크 하위 시스템에 의해 구동되는 데이터 패킷 전송 및 수신을 담당한다.
커널과 네트워크 장치 드라이버 간의 통신은 문자 및 블록 드라이버에 사용되는 통신과 완전히 다르다.
읽기, 쓰기 대신 커널은 패킷 전송과 관련된 기능(functions)을 호출한다.
https://reakwon.tistory.com/150
https://laptrinhmoingay.com/2020/01/30/linux-architecture-overview/
https://jeongzero.oopy.io/c5c9c223-d17f-4bbc-b054-4d9fa1faffd1
'background > linux kernel' 카테고리의 다른 글
[Lazenca][Development of Kernel Module] 03.ioctl(Input/Output control) (0) | 2024.03.28 |
---|---|
[Lazenca][Development of Kernel Module] 02.Character Device Drivers (0) | 2024.03.28 |
[Lazenca][Development of Kernel Module] 01.Hello world! (0) | 2024.03.28 |
fork-exec (1) | 2022.10.11 |
시스템 호출(system call) (0) | 2022.09.06 |