Jastes 2022. 3. 21. 23:11

1. ๋ฆฌ๋ˆ…์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ(Memory Layout)

ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ ๊ตฌ์—ญ์ด ์–ด๋–ค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ!

๋”๋ณด๊ธฐ

๐Ÿ“œ๊ฐœ์š”๐Ÿ“œ

  • ์„ธ๊ทธ๋จผํŠธ๋ž€
  • ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ
  • ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ
  • BSS ์„ธ๊ทธ๋จผํŠธ
  • ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ
  • ํž™ ์„ธ๊ทธ๋จผํŠธ

 

CPU๋Š” ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์™€ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ๊ณ , Instruction Set Architecture(ISA)์—

๋”ฐ๋ผ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. 

 

CPU์˜ ๋™์ž‘๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์— ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ์Œ์„ ์˜๋ฏธ

๊ณต๊ฒฉ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•…์˜์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์กฐ์ž‘๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์— ์˜ํ•ด CPU๋„ ์ž˜๋ชป๋œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์˜ค์—ผ๋๋‹ค๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์ทจ์•ฝ์ ์„ ๋ฉ”๋ชจ๋ฆฌ ์˜ค์—ผ(Memory Corruption) ์ทจ์•ฝ์ !

 


2. ์„ธ๊ทธ๋จผํŠธ(Segment)

์ ์žฌ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์šฉ๋„๋ณ„๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ตฌํš์„ ๋‚˜๋ˆˆ ๊ฒƒ

๋”๋ณด๊ธฐ

โœ”๏ธ์„ธ๊ทธ๋จผํŠธ ์ข…๋ฅ˜

    • ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ(Code Segment)
    • ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ(Data Segment)
    • BSS ์„ธ๊ทธ๋จผํŠธ(BSS Segment, Block Started By Symbol Segment)
    • ํž™ ์„ธ๊ทธ๋จผํŠธ(Heap Segment)
    • ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ(Stack Segment)

์„ธ๊ทธ๋จผํŠธ์—์„œ์˜ ๊ถŒํ•œ์€ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‹คํ–‰์œผ๋กœ ์กด์žฌํ•˜๋ฉฐ CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. CPU๋Š” ์ด๊ณณ์˜

๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋‹ˆ ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์‹์ด์ง€์š”.

์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ž์„ธํžˆ ์ดํ•ดํ• ๋ ค๋ฉด OS์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜ ๊ธฐ๋ฒ•๊ณผ

์ธํ…” x86-64(x64)์— ๊ด€๋ จ๋œ HW์˜ ์„ค๊ณ„๋ฅผ ์•Œ์•„์•ผํ•˜๋ฏ€๋กœ

์ผ๋‹จ '์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์œ„์™€ ๊ฐ™์ด 5๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค..' ์ •๋„๋กœ๋งŒ ์ดํ•ดํ•ฉ์‹œ๋‹ค

 


์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ(Code Segment)

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ธฐ๊ณ„ ์ฝ”๋“œ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ(Text Segment)๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ

ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ์„ธ๊ทธ๋จผํŠธ์—๋Š” ์ฝ๊ธฐ ๊ถŒํ•œ๊ณผ ์‹คํ–‰ ๊ถŒํ•œ์ด ๋ถ€์—ฌ!

๋ฐ˜๋ฉด, ์“ฐ๊ธฐ ๊ถŒํ•œ์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์ธ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์‰ฌ์›Œ์ง€๋ฏ€๋กœ, ์š”์ฆ˜ ๋Œ€๋ถ€๋ถ„์€ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ์ œ๊ฑฐํ•จ

 

int main() { return 31337; }

 

์œ„ ์ •์ˆ˜ 31337์„ ๋ฐ˜ํ™˜ํ•˜๋Š” mainํ•จ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ๋˜๋ฉด 554889e5b8697a00005dc3๋ผ๋Š” ๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ๋ณ€ํ™˜๋˜๋Š”๋ฐ,

์ด ๊ธฐ๊ณ„ ์ฝ”๋“œ๊ฐ€ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์— ์œ„์น˜ํ•จ

 


๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ(Data Segment)

์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐ’์ด ์ •ํ•ด์ง„ ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ ์ „์—ญ ์ƒ์ˆ˜๋“ค์ด ์œ„์น˜

CPU๊ฐ€ ์ด ์„ธ๊ทธ๋จผํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฝ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ๋Š” ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์„ธ๊ทธ๋จผํŠธ์™€ ์“ฐ๊ธฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‹ค์‹œ ๋ถ„๋ฅ˜๋˜๋Š”๋ฐ,


์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์ „์—ญ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด์„œ ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์œ„์น˜ํ•˜๋Š” data ์„ธ๊ทธ๋จผํŠธ

์“ฐ๊ธฐX ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด์„œ ๊ฐ’์ด ๋ณ€ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ „์—ญ์ƒ์ˆ˜์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋“ค์ด ์œ„์น˜ํ•˜๋Š” rodata(read-only data)์„ธ๊ทธ๋จผํŠธ


์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์— ํฌํ•จ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๋Š” str_ptr์ž…๋‹ˆ๋‹ค.

str_ptr์˜ ๋ฌธ์ž์—ด์€ ์ƒ์ˆ˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰๋˜์–ด rodata์— ์œ„์น˜ํ•˜๋ฉฐ ์ด๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” str_ptr์€ ์ „์—ญ ๋ณ€์ˆ˜๋กœ์จ 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
int main() { ... }

 


BSS ์„ธ๊ทธ๋จผํŠธ(Segment, Block Started By Symbol Segment)

์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐ’์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์œ„์น˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

์—ฌ๊ธฐ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ์–ธ๋งŒ ํ•˜๊ณ  ์ดˆ๊ธฐํ™”X ์ „์—ญ๋ณ€์ˆ˜ ๋“ฑ์ด ํฌํ•จ
์ด ์„ธ๊ทธ๋จผํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ, ๋ชจ๋‘ 0์œผ๋กœ ๊ฐ’์ด ์ดˆ๊ธฐํ™”

์ด ์„ธ๊ทธ๋จผํŠธ์—๋Š” ์ฝ๊ธฐ ๊ถŒํ•œ ๋ฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ „์—ญ ๋ณ€์ˆ˜์ธ bss_data๊ฐ€ BSS ์„ธ๊ทธ๋จผํŠธ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

int bss_data;
int main() {
  printf("%d\n", bss_data);  // 0
  return 0;
}

 

์œ„ ์ฝ”๋“œ์—์„œ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ „์—ญ ๋ณ€์ˆ˜์ธ bss_data๊ฐ€ BSS ์„ธ๊ทธ๋จผํŠธ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ์„ธ๊ทธ๋จผํŠธ์—๋Š” ์ฝ๊ธฐ ๊ถŒํ•œ ๋ฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

 


์Šคํƒ ์„ธ๊ทธ๋จผํŠธ(Stack Segment)

ํ”„๋กœ์„ธ์Šค์˜ ์Šคํƒ์ด ์œ„์น˜ํ•˜๋Š” ์˜์—ญ์œผ๋กœ ํ•จ์ˆ˜์˜ ์ธ์ž๋‚˜ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ž„์‹œ ๋ณ€์ˆ˜๋“ค์ด ์‹คํ–‰์ค‘์— ์—ฌ๊ธฐ์— ์ €์žฅ

์Šคํƒ ์„ธ๊ทธ๋จผํŠธ๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ์‚ฌ์šฉ
ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ƒ์„ฑ๋˜๊ณ , ๋ฐ˜ํ™˜๋  ๋•Œ ํ•ด์ œ

ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ์‹คํ–‰ ํ๋ฆ„์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ์š”์ธ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

๐Ÿ‘‡์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ choice์— ๋”ฐ๋ผ call_true()๊ฐ€ ํ˜ธ์ถœ๋  ์ˆ˜๋„, call_false()๊ฐ€ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

๋”ฐ๋ผ์„œ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ด ํ”„๋กœ์„ธ์Šค์˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ์‚ฌ์šฉ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋Š” ๊ฑด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•จ

๊ทธ๋ž˜์„œ OS๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์ž‘์€ ํฌ๊ธฐ์˜ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋จผ์ € ํ• ๋‹นํ•ด์ฃผ๊ณ , ๋ถ€์กฑํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ํ™•์žฅํ•จ

์Šคํƒ์ด ํ™•์žฅ๋  ๋•Œ, ๊ธฐ์กด ์ฃผ์†Œ๋ณด๋‹ค ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ํ™•์žฅ๋œ๋‹ค๋Š” ํŠน์ง•

์ด ์˜์—ญ์—๋Š” CPU๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊ฐ’์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋จ

์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ์ง€์—ญ๋ณ€์ˆ˜ choice๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋จ

 

void func() {
  int choice = 0;
  scanf("%d", &choice);
  
  if (choice)call_true();
  else call_false();
  
  return 0;
}

 


ํž™ ์„ธ๊ทธ๋จผํŠธ(Heap Segment)

ํž™ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ

์Šคํƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ํ• ๋‹น ๊ฐ€๋Šฅ
linux์—์„œ๋Š” ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ์™€ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋žŒ
๐Ÿ’ก ํž™๊ณผ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ž๋ผ๋Š” ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€์ธ ์ด์œ ?

 ๋‘ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋™์ผํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ๋ฉฐ, ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๊ฐ๊ฐ ํ• ๋‹น๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด
์ด ๊ฒฝ์šฐ,
๊ธฐ์กด์˜ ํž™ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋ฉด ํ™•์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ์™€ ์ถฉ๋Œ


 ์ด๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ˆ…์Šค๋Š” ์Šคํƒ์„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋์— ์œ„์น˜์‹œํ‚ค๊ณ , ํž™๊ณผ ์Šคํƒ์„ ๋ฐ˜๋Œ€๋กœ ์ž๋ž€๋‹ค๋ฉด
ํž™๊ณผ ์Šคํƒ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถฉ๋Œ ๋ฌธ์ œ๋กœ ๋ถ€ํ„ฐ๋„ ๋น„๊ต์  ์ž์œ !!

C์–ธ์–ด์—์„  malloc(), calloc() ๋“ฑ์ด ํ• ๋‹น๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ด ์„ธ๊ทธ๋จผํŠธ์— ํ•ด๋‹น๋˜๋ฉฐ.

์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋จ

์•„๋ž˜ ์ฝ”๋“œ๋Š” heap_data_ptr์— malloc()์œผ๋กœ ๋™์  ํ• ๋‹นํ•œ ์˜์—ญ์˜ ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•˜๊ณ , ๊ทธ ์˜์—ญ์— ๊ฐ’ ์‚ฌ์šฉ

heap_data_ptr์€ ์ง€์—ญ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์Šคํƒ์— ์œ„์น˜ํ•˜๋ฉฐ, malloc์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ํž™ ์„ธ๊ทธ๋จผํŠธ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ด

 

int main() {
  int *heap_data_ptr =
      malloc(sizeof(*heap_data_ptr));  // ๋™์  ํ• ๋‹นํ•œ ํž™ ์˜์—ญ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  *heap_data_ptr = 31337;              // ํž™ ์˜์—ญ์— ๊ฐ’์„ ์”€
  printf("%d\n", *heap_data_ptr);  // ํž™ ์˜์—ญ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•จ
  return 0;
}

๊ฒฐ๋ก 

์„ธ๊ทธ๋จผํŠธ ์—ญํ•  ์ผ๋ฐ˜์ ์ธ ๊ถŒํ•œ ์‚ฌ์šฉ ์˜ˆ
์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ์˜์—ญ ์ฝ๊ธฐ, ์‹คํ–‰ main() ๋“ฑ์˜ ํ•จ์ˆ˜ ์ฝ”๋“œ
๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜ ๋˜๋Š” ์ƒ์ˆ˜๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์˜์—ญ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜, ์ „์—ญ ์ƒ์ˆ˜
BSS ์„ธ๊ทธ๋จผํŠธ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์˜์—ญ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ „์—ญ ๋ณ€์ˆ˜
์Šคํƒ ์„ธ๊ทธ๋จผํŠธ ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์ง€์—ญ ๋ณ€์ˆ˜, ํ•จ์ˆ˜์˜ ์ธ์ž ๋“ฑ
ํž™ ์„ธ๊ทธ๋จผํŠธ ์‹คํ–‰์ค‘์— ๋™์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜์—ญ ์ฝ๊ธฐ, ์“ฐ๊ธฐ malloc(), calloc() ๋“ฑ์œผ๋กœ ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ

 


์ฐธ๊ณ  ์ž๋ฃŒ(๋‹จ, ์œ„ ๋ถ€๋ถ„์€ ์ œ๊ฐ€ ๋ฐฐ์šด ๋‚ด์šฉ ์š”์•ฝ์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์œ„ ๋‚ด์šฉ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

 

Background: Computer Architecture

์ปดํ“จํ„ฐ ๊ตฌ์กฐ ๋ฐ ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ , ์ปค๋ฆฌํ˜๋Ÿผ์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์ธํ…” x86-64 ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Background: Computer Architecture

์ปดํ“จํ„ฐ ๊ตฌ์กฐ ๋ฐ ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ , ์ปค๋ฆฌํ˜๋Ÿผ์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์ธํ…” x86-64 ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

dreamhack.io