[Dreamhack - System Hacking] STAGE 2 : Linux Memory Layout QUIZ

eunee22·2023년 7월 1일

Dreamhack/SystemHacking

목록 보기
4/12

문제에서 주어진 코드

#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;
}

문제

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

d는 함수 안의 지역 변수이다. 그러므로 임시 변수들이 저장되는 스택 세그먼트에 위치 할 것 이다.
A1. 스택

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

a는 전역 변수이고, 선언과 동시에 값이 초기화 된다. 그러므로 컴파일 시점에 값이 정해진 전역 변수가 위치하는 데이터 세그먼트에 위치 할 것 이다.
A2. 데이터

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

foo 함수는 내부에 실행 가능한 코드를 가지고 있으므로
A3. 코드

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

c는 컴파일 시점에 값이 정해지지 않은 전역 변수이므로
A4. BSS 세그먼트

Q5. e가 위치하는 세그먼트는 어디인가?

e에는 malloc() 함수로 할당받은 힙 영역의 메모리의 주소를 저장하고 있으므로

A5. 힙 세그먼트

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

b는 상수인 문자열을 저장하고 있는 const char 형 배열이다. 그러므로 읽기 전용 데이터 영역에 위치해야한다.
A6. rodata 세그먼트

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

문자열은 변하면 안되는 값이다. 그러므로 읽기 전용 데이터 영역에 위치해야한다.
A7. rodata 세그먼트

profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글