Stage2 요약
<리눅스 메모리 구조>
컴퓨터(CPU + 메모리)
CPU: 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고 ISA로 처리, 연산의 결과를 다시 메모리 적재
CPU와 메모리사이 연관이 있음 -> 메모리를 악의적으로 조작할 수 있다면 조작된 메모리 값에 의해 CPU도 잘못 동작(메모리 오염)
<리눅스 프로세스의 메모리 구조>
리눅스에서는 프로세스의 메모리를 위 사진처럼 크게 5가지로 구분 -> 운영체제가 메모리를 용도별로 나누면 각 용도에 맞게 적절한 권한을 부여할 수 있는 장점이 있음. (CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있음)
코드 세그먼트
: 텍스트 세그먼트라고도 하며 실행 가능한 기계 코드가 위치하는 영역(코드 저장소)
(읽기 권한과 실행 권한이 부여, 쓰기 권한이 있으면 악의적인 코드 삽입이 쉬워지므로 현대 운영체제는 이 권한 제거)
데이터 세그먼트
: 컴파일 시점에 값이 정해진 전역변수 및 전역 상수들이 위치
(CPU가 데이터를 읽을 수 있어야 하므로 읽기 권한 부여, 쓰기 권한이 되는 세그먼트(data 세그먼트)와 못쓰는 세그먼트(rodata세그먼트)로 구분)
BSS 세그먼트
: 컴파일 시점에 값이 정해지지 않은 전역변수가 위치하는 메모리 영역(선언만 하고 초기화 하지 않은 전역 변수들)
이 세그먼트는 시작될 때 모두 0으로 초기화 (읽기 및 쓰기 권한 부여)
스택 세그먼트
: 프로세스의 스택이 위치하는 영역(임시 변수들이 실행 중에 저장되는 곳)
스택 프레임(함수가 호출될 때 생성, 반환될 때 해제)이라는 단위로 사용 -> 프로세스가 얼마 만큼의 스택 프레임을 사용하게 될지 계산하지 못함 -> 시작할 때 작은 크기의 스택 세그먼트 할당 후 확장
(CPU가 자유롭게 값을 읽고 쓸 줄 알아야하므로 읽기와 쓰기 권한이 부여)
힙 세그먼트
: 힙 데이터가 위치하는 세그먼트
동적 할당이 가능하며(C언어에서 malloc()과 calloc() 등) 스택 세그먼트와 반대로 자라남.
읽기와 쓰기 권한 부여
정리
'System & Reversing 필기' 카테고리의 다른 글
DreamHack Stage2( x86 Assembly) (0) | 2023.05.01 |
---|---|
DreamHack Stage2(컴퓨터 구조) (0) | 2023.05.01 |
BoF (0) | 2023.03.18 |
x86, x64 레지스터 (0) | 2023.03.18 |
어셈블리어 명령어 정리 (0) | 2023.03.12 |