ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리눅스 메모리 구조 (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() 등을 호출해서 할당받는 메모리
    • 읽기 권한, 쓰기 권한 부여

     

    참조

    https://learn.dreamhack.io/52

    '드림핵' 카테고리의 다른 글

    [드림핵] 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
Designed by Tistory.