[Kernel Exploit] Basic Operating Systems (4)
공부용/Kernel Exploit Study

[Kernel Exploit] Basic Operating Systems (4)

Linkers and Loaders

 - Linkers는 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 프로그램이다. (Wikipedia)

 - Loaders는 Executable program을 찾아서 주기억장치에 적재하고, 그 프로그램이 실행되도록 하는 역할을 담당한다.

 - Relocation은 프로그램의 위치 종속 코드 및 데이터에 대한 로드 주소를 할당하고 할당 된 주소를 반영하도록 코드 및 데이터를 조정하는 프로세스이다. (Wikipedia)

 - Dynamically Linked Libraries(DLL)은 모든 프로그램 메모리를 로딩하는 게 아닌, 함수가 call 될 때 그 메모리를 로딩하는 것이다.

 

Implementation

 - 초기에는 Assembly로 Operating Systems를 많이 작성했다.

 - 최근에는 C, C++와 같은 Assembly 보다는 High-Level Language를 사용하여 Operating Systems를 작성한다. 이는 호환성은 Assembly 보다 뛰어나지만 느리다는 단점이 있다.

 

Layered Approach

 - OS의 복잡도를 낮추기 위한 방안이다.

 - Layer는 정의가 명확한(well-defined) 함수들로 이루어진다.

 - 하나의 Layer는 인접한 Layer와만 통신한다.

 

 

Microkernels

 - 중요한 기능은 커널에 남겨두고 나머지는 User Space에서 동작하는 것처럼 행동하는 게 Microkernels다. (초소형)

 - 장점으로는 확장이 용이하며, reliable, secure 하고 Operating Systems를 새로운 아키텍쳐에 이식하기 쉽다.

 - 단점으로는 속도가 떨어진다. (overhead)

 

 

Modules

 - Modules은 객체 지향 방법론을 이용해 탈부착이 가능한 라이브러리, 소프트웨어, 하드웨어를 뜻한다. (유연성)

 

Android

 - 기본적으로 Android는 Open Source 기반이다.

 - Android는 Linux Kernel 기반이지만 물론 어느정도 수정을 거쳐 저전력 저사양에 맞췄다.

 - Bionic이라는 Standard C Library를 사용한다.

 

Building and Booting Linux

 - Linux source code를 다운 받는다.

 - make menuconfig로 리눅스 커널을 설정한다.

 - make로 커널을 컴파일한다.

 - make modules로 커널 모듈을 컴파일한다.

 - make install로 시스템에 새로운 커널을 할당한다.

 

System Boot

 - Booting Program은 비휘발성 메모리인 ROM 또는 EEPROM에다 둔다. (Bootstrap Loader)

 - 그러나 최근에는 Operating Systems의 용량이 크기 때문에, ROM 말고 boot block을 올려 사용한다.

 - GRUB는 리눅스의 Boot Loader이다.

 

BCC

 - BPF Compiler Collection이라는 Operating Systems 커널 성능 측정 툴