앞으로 최소 두달 이상 책읽을 시간이 많아져서 리버싱 엔지니어링을 집중적으로 공부하려합니다. 우선 기본기가 가장 중요하기 때문에, 리눅스 시스템에 대한 이야기를 해보고, bash-shell, env, permission, filesystem, web script, database script 등 조금식 알아가 보겠습니다.
리눅스 시스템을 구성하는 파트는 우선
application software (컴퓨터 안의 프로그램들, elf같은것) ,
window management software,
gnu system utilities(cat, ls같은 명령어가 구현되어 있음)
Kernel,
hardware 이렇게 5가지가 있다고 볼 수 있습니다.
안드로이드 커스텀을 해보신 분들은 이해하기 쉽습니다. 보통 안드로이드 기기를 루팅하는 과정은 부트로더 언락( 이부분은 일단 생략), 부트로더 변경, 커스텀 커널 빌드, 커스텀 롬 빌드 이렇게 4개의 과정을 거쳐야 합니다. 하나라도 생략되면 진행되지 않고, 특히 부트로더, 커널, 롬 이 3개중 하나라도 에러가 난다면 그 기기는 일명 '벽돌'이 됩니다
(학생때 이걸 하다가 휴대전화 몇개를 부숴먹었는지 모르겠네요...)
위 사진에서 보이는것과 같이 하드웨어와 소프트웨어를 연결해주는 부분은 Kernel입니다. 브릿지? 같은거라고 생각하셔도 될것같네요.
커널이 하는 역할은 크게 4가지가 있습니다.
1. 시스템 메모리 관리
2. 소프트웨어 관리
3. 하드웨어 관리
4. 파일시스템 관리
2,3번은 당연히 아시겠지만 1,4번은 뭔가 뭔소린지 모르겠죠? 저도 그래요
시스템 메모리 관리
메모리엔 크게 2가지가 있습니다. physical memory와 virtual( or logical) memory 입니다.
(메모리와 램을 혼돈하면 안될것같아요. 램은 RAM, 즉 random-access memory 로서 메모리의 하나의 종류입니다.)
가상 공간에 있는 정보를 실제 메모리로 swap해주면서 시스템이 실제 메모리보다 더 많은 공간이 있는것처럼 인식하도록 합니다. (그래서 swap공간이라 부릅니다. swap space는 하드 디스크에 존재합니다)
리눅스 어플리케이션이 작동할때 swapping이라는 개념을 알아야 합니다.
메모리 공간의 블럭들은 page(프레임)라는 단위로 구분됩니다. kernel은 각각의 page(메모리 공간)들을 physical memory(RAM) 또는 swap space(저장공간)에 저장합니다. 이때 어떤 page가 현재 ram에 위치해있고 어떠한 page가 swap space에 swapped out 됐는지 table(memory map)에 기록합니다. 이때 커널은 어떤 메모리 page공간이 사용되고 있는지 기록하고, 일정 기간동안 사용되지 않은(not been accessed for a period of time) 공간을 가져옵니다(copies).
이때, copy하는 동작을 swapping out이라고 표현합니다.
swap out된 메모리 프레임을 사용하려면, physical memory에 swap out을 통해 공간을 만들고, 원하는 메모리 프레임을 swap space에서 swap in 해야 합니다.
다음같은 메모리 구조로 리눅스에서 프로그램이 돌아갑니다. 확실히 깊게 알아볼수록 제가 몰랐던게 너무 많네요. 이 swapping에서 ASLR이나 pie같은 보호기법과의 관계는 좀더 후에 알아보고, 내일은 소프트웨어 관리와 하드웨어 관리에 대해 공부해보겠습니다.
++또한 자료 첨부할때 저작권 문제가 있어 구글, 카카오광고는 이제 내리겠습니다 :)
참고 자료
Help - Eclipse SDK
www.qnx.com
www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html
Operating Systems: Virtual Memory
Figure 9.13 - Page-fault curve for FIFO replacement on a reference string. There are a number of page-buffering algorithms that can be used in conjunction with the afore-mentioned algorithms, to improve overall performance and sometimes make up for inheren
www.cs.uic.edu
참고 서적 -Linux Command Line and Shell Scripting Bible (blum and bresnahan)
'Linux system' 카테고리의 다른 글
gdb trick (0) | 2021.09.25 |
---|---|
Linux 시스템에 대한 이해 _ 2 (0) | 2021.04.10 |