본문 바로가기

DreamHack: System Hacking/F Stage 2

Quiz: Linux Memory Layout

코드:

#include <stdlib.h>
int a = 0xa;
const char b[] = "d_str";
int c;
int foo(int arg) {
  int d = 0xd;
  return 0;
}
int main()
{
  int *e = malloc(sizeof(*e));
  return 0;
}

 

문제 및 풀이:

1. a가 위치하는 세그먼트는 어디인가?

풀이: a는 초기화된 전역 변수이므로, 데이터 세그먼트에 위치한다.


2. "d_str"가 위치하는 세그먼트는 어디인가?

풀이: "d_str"은 전역 상수이므로 read-only data에 해당한다.


3. e는 어느 세그먼트의 데이터를 가리키는가?

풀이: e는 동적으로 할당받은 힙 세그먼트의 주소를 가리킨다


4. c가 위치하는 세그먼트는 어디인가?

풀이: c는 초기화되지 않은 전역 변수이므로 bss에 위치한다


5. b가 위치하는 세그먼트는 어디인가?

풀이: b는 전역 상수로서 read only data에 해당한다


6. foo가 위치하는 세그먼트는 어디인가?

풀이: foo는 실행 가능한 함수 코드로서, 코드 세그먼트에 위치한다


7. d가 위치하는 세그먼트는 어디인가?

풀이: d는 함수 내에서 선언된 지역 변수이므로, 스택 세그먼트에 위치한다