Background : Linux Memory Layout

곽무경·2022년 6월 28일
0

System Hacking

목록 보기
2/27

세그먼트

  • 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것
  • 각 용도에 맞게 적절한 권한을 부여할 수 있다. (read, write, execute)

코드(텍스트) 세그먼트

실행 가능한 기계 코드가 위치하는 영역

  • 읽기, 실행 권한 부여
  • 함수 등

데이터 세그먼트

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

  • 읽기 권한 부여
  • 쓰기 가능한 세그먼트(data 세그먼트)
    • 전역 변수(값이 변할 수 있음)
  • 쓰기 불가능한 세그먼트(read-only data 세그먼트)
    • 전역 상수(값이 변할 수 없음)
int data_num = 31337;                       // data
char data_rwstr[] = "writable_data";        // data
const char data_rostr[] = "readonly_data";  // rodata
char *str_ptr = "readonly";  // str_ptr은 data, 문자열은 rodata

BSS 세그먼트

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

  • 읽기, 쓰기 권한 부여
  • 프로그램이 시작될 때 모두 0으로 초기화

스택 세그먼트

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

  • 함수의 인자, 지역 변수
  • 읽기, 쓰기 권한 부여
  • 함수가 호출될 때 스택 프레임이 생성, 반환될 때 해제
    • 프로세스를 시작할 때 작은 크기의 스택 프레임이 먼저 할당되고, 부족하면 기존보다 낮은 주소로 확장

힙 세그먼트

힙 데이터가 위치하는 영역

  • 동적 할당된 메모리(C의 malloc(), calloc() 등)
  • 읽기, 쓰기 권한 부여
  • 스택 세그먼트와 반대 방향으로 확장

0개의 댓글