동아리 활동

System Hacking : 리눅스 메모리 레이아웃 Quiz 풀이

Hicecream 2023. 4. 27. 12:28

System Hacking


STAGE 2 : Background - Computer Science (1/3)


Linuux Memory Layout 퀴즈 풀이

 

 

 

Quiz 1.

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

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

A 데이터

B 힙 ✔️

C 스택

D 읽기 전용 데이터 (rodata)

E 코드

F BSS

 

 

풀이: e는 malloc()을 호출하여 메모리를 동적 할당 받았으므로 힙 세그먼트에 위치한다.

 

 

 

Quiz 2.

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

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

A 스택

B 데이터 ✔️

C 읽기 전용 데이터 (rodata)

D 코드

E BSS

F 힙

 

 

풀이: a는 컴파일 시점에 값이 정해진 전역 변수이므로 데이터 세그먼트에 위치한다.

 

 

 

Quiz 3.

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

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

A 힙

B 코드

C 데이터

D 읽기 전용 데이터 (rodata)

E 스택 ✔️

F BSS

 

 

풀이: d는 foo 함수의 지역 변수이므로 스택 세그먼트에 저장된다.

 

 

 

Quiz 4.

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

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

A 힙
B 코드
C 데이터
D 읽기 전용 데이터 (rodata) ✔️
E 스택
F BSS

 

 

풀이: b는 const로 상수화 하여 값을 변하지 않게 선언해줬기 때문에 rodata (read-only-data) 세그먼트에 위치한다.

 

 

 

Quiz 5.

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

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

A 스택
B 힙
C 데이터
D 코드 ✔️
E BSS
F 읽기 전용 데이터 (rodata)

 

 

풀이: foo는 함수이므로 코드 세그먼트에 위치한다.

 

 

 

Quiz 6.

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

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

A 힙
B 데이터
C BSS
D 읽기 전용 데이터 (rodata) ✔️
E 코드
F 스택

 

 

풀이: "d_str"은 상수화 된 값이 변하면 안되는 데이터이므로 rodata 세그먼트에 위치한다.

 

 

 

Quiz 7.

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

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

A 읽기 전용 데이터 (rodata)
B 힙
C 스택
D 코드
E BSS ✔️
F 데이터

 

 

풀이: c는 컴파일 시점에 값이 정해지지 않은, 선언만 하고 초기화하지 않은 전역 변수이므로 BSS 세그먼트에 위치한다.