background/linux kernel

    [Linux Kernel] Device Driver

    [Linux Kernel] Device Driver

    리눅스 커널 익스플로잇을 공부하기 위해 나름대로 정리한 글입니다. 틀린 내용이 있을 수 있습니다. 리눅스는 모놀리딕 아키텍처가 아닌 모듈로 구성되어 있기 때문에 성능은 낮은 대신, 유지 보수가 용이하다. 이 말인 즉슨 무언가를 추가하고 제거하는 것이 USB를 꽂았다 제거하듯이 간편하다는 의미이다. 리눅스 커널 아키텍처는 다음과 같다. 유저는 시스템 콜로 커널에게 작업을 요청하게 된다. (인터럽트 발생) 그럼 커널은 요청 받은 작업을 수행하고 유저에게 결과를 리턴해준다. 리눅스 커널은 모든 것들을 파일로 인식하고 처리한다고 했다. 이는 장치(device)도 예외는 아니다. 장치 제어를 위해 필요한 것이 바로 장치 드라이버(device driver)이다. 장치 드라이버는 하드웨어의 모든 기능들을 수행할 수 ..

    [Lazenca][Development of Kernel Module] 01.Hello world!

    [Lazenca][Development of Kernel Module] 01.Hello world!

    이 예제는 ubuntu 18.10에서 진행된다. 여기서 다운받아서 vmware로 가상머신 하나 만들어줬다. https://old-releases.ubuntu.com/releases/18.10/ gcc가 설치되어 있어야 한다. lazenca0x0@ubuntu:~$ uname -a Linux ubuntu 4.18.0-11-generic #12-Ubuntu SMP Tue Oct 23 19:22:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux lazenca0x0@ubuntu:~$ gcc --version gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free soft..

    fork-exec

    fork() is the name of the system call that the parent process uses to "divide" itself ("fork") into two identical processes. After calling fork(), the created child process is an exact copy of the parent except for the return value of the fork() call. This includes open files, register state, and all memory allocations, which includes the program's executable code. In some cases the two continue..

    시스템 호출(system call)

    이 글을 system call에 대해 제가 이해한 부분까지 정리해놓은 글입니다. (더 자세한 내용은 레퍼런스를 참조해주세요) system call (syscall) 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 바꿔 말해 프로그래밍 언어에서 지원하지 않는 기능을 운영 체제에게 처리해달라고 부탁하는 것이다. 커널과 응용 프로그램은 CPU의 권한 수준(privilege levels)이나 하드웨어 접근 능력이 다르다. 커널은 CPU 시스템의 특정 메모리 위치에서 동작한다. 커널의 기계어 코드에서 사용하는 모든 주소는 물리 주소로 고정되어 컴파일되고 로드되어 실행된다. 커널은 부팅과정에서 전체 메모리 리소스 중에 일정 부분을 점유하여 동작하고 인터..