-
리눅스 메모리 구조 (Memory Layout)드림핵 2025. 3. 10. 09:27
프로세스 가상메모리의 각 구역이 어떤 정보가 저장되어있는가?
세그먼트 (Segment)
- 적재되는 데이터의 용도별로 메모리의 구획 분리
- 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트로 구분
코드 세그먼트 (Code Segment)
- 기계 코드가 위치
- 텍스트 세그먼트 (Text Segment)
- 읽기 권한, 실행 권한 부여
- 악의적 코드 삽입 방지를 위해, 쓰기 권한 제한
데이터 세그먼트 (Data Segment)
- 컴파일 시점에 값이 정해진 전역 변수, 전역 상수
- 읽기 권한 부여
- 실행되면서 값이 변경 가능한 데이터들이 위치 -> data 세그먼트 (쓰기 가능)
- 실행되면서 값이 변경 불가능한 데이터들이 위치 -> rodata(read-only data) 세그먼트
- 포인터로 선언한 문자열 변수에서 문자열은 상수 문자열 (rodata), 변수는 전역 변수 (data )
BSS 세그먼트 (Block Started By Symbol Segment)
- 컴파일 시점에 값이 정해지지 않은 전역 변수 (선언O, 초기화X)
- 프로그램이 시작될 때, 모두 0으로 초기화
- 읽기 권한, 쓰기 권한 부여
스택 세그먼트 (Stack Segment)
- 프로세스의 스택이 위치
- 함수의 인자나 지역 변수와 같은 임시 변수들이 실행중에 여기에 저장
- 스택 프레임(Stack Frame) 이라는 단위로 사용 (함수가 호출될 때 생성되고, 반환될 때 해제)
- 실행중에 동적 확장 (기존 주소보다 낮은 주소로 확장)
- 읽기 권한, 쓰기 권한 부여
힙 세그먼트 (Heap Segment)
- 힙 데이터가 위치
- 실행중에 동적 할당 (기존 주소보다 높은 주소로 확장)
- C언어에서 malloc(), calloc() 등을 호출해서 할당받는 메모리
- 읽기 권한, 쓰기 권한 부여
참조
'드림핵' 카테고리의 다른 글
[드림핵] Return Address Overwrite (0) 2025.04.30 x86 Assembly (0) 2025.03.10 컴퓨터 구조 (Computer Architecture) (0) 2025.03.10 [DreamHack] Dream Beginners Tips (0) 2025.03.02 Dream Beginners (0) 2025.02.23