1. LINUX MEMROY ARCHITECTURE
리눅스 메모리는 커널 메모리, 유저 메모리 그리고 접근할 수 없는 NULL Pointer 영역으로 나누어져 있다.
유저메모리 영역과 커널 영역 메모리의 가장 큰 차이점은 코드 실행 권한에 있다. 커널 영역은 유저보다 높은 권한을 가진다. 이 말은 커널 코드는 유저 메모리 영역에 접근이 가능 하지만, 유저 모드에서 실행되는 코드는 커널 메모리 영역에 접근할 수 없다는 뜻이다.
애플리케이션이 로드되었을 때, 모든 동적 라이브러리들은 가상 메모리 공간에 할당되게 된다.
이때 같은 파일에 있는 다른 섹션들(Data, Code)들은 다른 부분에 할당되어진다. 하지만 윈도 모듈들은 순차적으로 같은 공간에 할당된다.
프로세스가 실행하기 위한 준비가 끝나면 프로세스 ID 가 할당받게 된다. 만약 또 다른 프로세스를 실행한다고 다른른 독립적인 가상 메모리 공간을 할당받는다.
프로세스 코어덤프를 저장하면 커널 영역을 제외한 유저 영역 부분이 저장된다. 하지만 실제로 저장된 덤프는 유저 영역만큼 큰 사이즈를 갖지 않는다. 이유는 코드와 데이터를 채워지지 않는 영역이 존재하기 때문이다.
만약 어떤 영역이 페이지아웃 되어 있고, 해당 내용이 페이지 파일에 존재한다면 덤프를 저장하기 전에 해당 내용을 다시 메모리에 올려놓고 덤프 저장을 수행한다.
스레드는 실행유닛(즉 코드를 실행하는 객체)이면 하나의 프로세스는 여러 개의 스레드가 존재할 수 있다.
스레드는 프로세스가 관리하는 여러 객체(자원)들 중 하나이며, 코드를 실행하면서 프로세스가 제공하는 자원(메모리, 핸들, 소켓 등)을 사용한다.
각각의 스레드는 자신만의 고유한 ID를 가지고 있으며, 리눅스에서는 전통적으로 libc 동적 라이브러리를 통해 커널 공간에 연결 된다. (Windows는 ntdll, MAC 은 libsystem_kernel)
모든 스레드는 자신이 실행된 함수의 히스토리 그리고 임시적으로 사용하는 변수(데이터)를 기록 해야하는데. 이 공간을 스레드 스택이라고 한다. 덤프 분석에서 가장 핵심은 이 스레드 스택 메모리의 복원이다. 앞으로 덤프 분석을 통해 이 스레드 스택을 복원하는 과정을 알아볼 것이다.
'개발 > Linux' 카테고리의 다른 글
Linux Binary Analysis - 1 (0) | 2021.06.04 |
---|---|
[디버깅] Radare2 (1) 설치 (0) | 2021.03.30 |
Linux Core Dump Analysis - 4 (분석실습_a) (0) | 2020.09.11 |
Linux Core Dump Analysis - 3 (덤프분석 및 디버깅 환경 구축 ) (0) | 2020.09.11 |
Linux Core Dump Analysis - 2 (Dump on Linux) (0) | 2020.09.11 |