[Quiz] Background : Linux Memory Layout

·2023년 1월 12일
0

System Hacking

목록 보기
2/10
#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 : 데이터 (rodata) 세그먼트
-> 값이 정해진 전역 변수
c : BSS 세그먼트
-> 값이 정해지지 않은 전역 변수
d : 스택 세그먼트
-> foo 함수의 지역 변수
e : 힙 세그먼트
-> malloc으로 메모리를 동적 할당을 받았음
foo : 코드 세그먼트
-> 함수 코드
d_str : 데이터 (rodata) 세그먼트
상수 문자열

const char data_rostr[] = “readonly_data”; // rodata

위와 같이 앞에 const 가 붙으면 data_rostr[] 와 "readonly_data" 모두 rodata 세그먼트입니다

하지만 만일

const char *b[] = "d_str";

와 같이 b -> *b로 바뀔 경우, 값이 정해진 전역 변수이기 때문에 데이터 세그먼트가 맞습니다

0개의 댓글