[Dreamhack]Linux Memory Layout

최윤지·2024년 1월 28일

System Hacking

목록 보기
2/9

세그먼트

: 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것

리눅스에서 프로세스의 메모리를 크게 5가지 세그먼트로 구분↓

코드 세그먼트(Code Segment)

: 실행 가능한 기계 코드가 위치하는 영역 (텍스트 세그먼트라고도 불림)

  • 읽기실행 권한 부여

데이터 세그먼트(Data Segment)

: 컴파일 시점에 값이 정해진 전역 변수전역 상수들이 위치하는 영역

  • 쓰기 가능한 세그먼트(data 세그먼트) : 전역 변수와 같이 프로그램이 실행되면서 값이 변할 수 있는 데이터들이 위치하는 영역

    • 읽기쓰기 권한 부여
  • 쓰기 불가능한 세그먼트(rodata 세그먼트) : 전역 상수와 같이 프로그램이 실행되면서 값이 변하면 안되는 데이터들이 위치하는 영역

    • 읽기 권한 부여

BSS 세그먼트(Block Started By Symbol Segment)

: 컴파일 시점에 값이 정해지지 않은 전역 변수가 위치하는 영역

  • 선언만 하고 초기화되지 않은 전역 변수 등이 포함

  • 이 세그먼트의 메모리 영역은 프로그램이 시작될 때, 모두 0의 값으로 초기화

  • 읽기쓰기 권한 부여

스택 세그먼트(Stack Segment)

: 프로세스의 스택이 위치하는 영역

  • 함수의 인자지역 변수와 같은 임시 변수들이 실행 중에 여기에 저장

  • 스택 프레임(Stack Frame)이라는 단위 사용

    • 스택 프레임은 함수가 호출될 때 생성, 반환될 때 해제
  • 운영체제는 프로세스를 시작할 때 작은 크기의 스택 세그먼트를 먼저 할당, 부족해질 때마다 확장

  • 스택에 대해서 '아래로 자란다'라는 표현은 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장되기 때문

  • 읽기쓰기 권한 부여

힙 세그먼트(Heap Segment)

: 힙 데이터가 위치

  • 스택과 마찬가지로 실행 중에 동적으로 할당 가능

  • 리눅스에서는 스택 세그먼트와 반대 방향으로 자람

  • C언어에서 malloc(), calloc() 등을 호출해서 할당받는 메모리가 이 세그먼트에 위치

  • 읽기쓰기 권한 부여

0개의 댓글