rosieblue
article thumbnail
728x90

๋“ค์–ด๊ฐ€๋ฉฐ

์šฐ๋ฆฌ์˜ ๋ชฉ์ ์€ ์ปดํ“จํ„ฐ์˜ ์‹œ์Šคํ…œ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ , ์ทจ์•ฝ์ ์„ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ปดํ“จํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ๊ณต๊ฐ„์— ๋“ค์–ด์žˆ๋‹ค. ํ—ˆ๊ฐ€ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ๋“ค์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋“ค์ด ์–ด๋–ป๊ฒŒ ๋‚˜๋‰˜์–ด์„œ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ทธ ๋ฐ์ดํ„ฐ๋“ค์˜ ์šฉ๋„๋Š” ๋ฌด์—‡์ด๊ณ  ์–ผ๋งˆ๋‚˜ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ์ง€์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„์•ผํ•œ๋‹ค.

  • ์ปดํ“จํ„ฐ๋Š” CPU์—์„œ ์—ฐ์‚ฐ์„ ํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ISA์— ๋”ฐ๋ผ์„œ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋งŒ์•ฝ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์˜ค์—ผ๋œ๋‹ค๋ฉด, ์ด์ƒํ•œ ๋ฐ์ดํ„ฐ๋กœ CPU๊ฐ€ ์ด์ƒํ•œ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์˜ค์—ผ(Memory Corruption)์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค์—ผ์„ ๋ฐฉ์–ด/ํ˜น์€ ์œ ๋ฐœํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค.

CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ, ๋ ˆ์ง€์Šคํ„ฐ์™€ ๊ฐ™์€ ์ „๋ฐ˜์ ์ธ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์ž!


๐Ÿ—„ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ

๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฒฐ๊ตญ ์ž์›์ด ๋“ค์–ด์žˆ๋Š” ์ƒ์ž๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๊ทธ ์ƒ์ž์—๋Š” ์ž์›์˜ ์ข…๋ฅ˜ ๋ฐ ์šฉ๋„์— ๋”ฐ๋ผ ์„œ๋ž์œผ๋กœ ๋‚˜๋ˆ ๋†จ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์˜ท์žฅ์— ๋ฐ”์ง€ ๋„ฃ๋Š” ์„œ๋ž, ์ƒ์˜ ๋„ฃ๋Š” ์„œ๋ž์œผ๋กœ ๋‚˜๋ˆ ๋‘” ๊ฒƒ์ฒ˜๋Ÿผ !

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š”  ์„œ๋ž์„ ‘์„ธ๊ทธ๋จผํŠธ’๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด์ œ ๋ฐ”์ง€ ์„œ๋ž์„ ๋ฐ”์ง€ ์„ธ๊ทธ๋จผํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด๋‹ค. ์„ธ๊ทธ๋จผํŠธ๋“ค์—๋„ ์ด๋ฆ„์ด ์žˆ๋‹ค. ์ด์ œ ๊ทธ๊ฑธ ์‚ดํŽด๋ณด์ž.

์„ธ๊ทธ๋จผํŠธ๋“ค

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ํฐ ์ƒ์ž ์•ˆ์— ์—ฌ๋Ÿฌ ์„œ๋ž, ์ฆ‰ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ทธ ์„ธ๊ทธ๋จผํŠธ๋Š” ๋“ค์–ด๊ฐ€์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ์˜ ์šฉ๋„์— ๋”ฐ๋ผ ๋‚˜๋‰˜์–ด์ ธ์žˆ๋‹ค. ๋งˆ์น˜ ๋ฐ”์ง€๋ฅผ ๋„ฃ๋Š” ์„œ๋ž๊ณผ ์ƒ์˜๋ฅผ ๋„ฃ๋Š” ์„œ๋ž์ด ๋‹ค๋ฅด๊ณ , ์†๋ฐ”์ง€๋ฅผ ๋„ฃ๋Š” ์„œ๋ž๊ณผ ๊ทธ๋ƒฅ ๋ฐ”์ง€๋ฅผ ๋„ฃ๋Š” ์„œ๋ž์ด ๋‹ค๋ฅด๋“ฏ์ด ๋ง์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ์„ธ๊ทธ๋จผํŠธ๋“ค์€ ๊ทธ์ € ์„œ๋ž๊ณผ๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ์„ธ๊ทธ๋จผํŠธ๋Š” ์„ธ๊ทธ๋จผํŠธ์— ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ๋‹ค ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์˜ ๊ฒฝ์šฐ ์ฝ๊ธฐ(r), ์‹คํ–‰(x)์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์“ฐ๊ธฐ(w)๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ์ค„ ๊ฒฝ์šฐ ์ด๋ฏธ ์‹คํ–‰๊ถŒํ•œ๋„ ์žˆ๋Š”๋ฐ ์ด์ƒํ•œ ๊ฑธ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ถŒํ•œ(r,w,x)์ด๋ผ๋Š” ํŠน์„ฑ๋„ ๋ถ€์—ฌ๋˜์–ด์žˆ๋‹ค๋Š” ์ ๋„ ๊ธฐ์–ตํ•˜์ž.


์„ธ๊ทธ๋จผํŠธ ์ข…๋ฅ˜
๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์„ธ๊ทธ๋จผํŠธ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

  • ๐Ÿ‘ฉ‍๐Ÿ’ป ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ (ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ)
  • ๐Ÿ“ƒ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ (data, rodata)
  • 0๏ธโƒฃ BSS ์„ธ๊ทธ๋จผํŠธ
  • ํž™ ์„ธ๊ทธ๋จผํŠธ
  • ๐Ÿ“š ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ


๊ทธ๋Ÿผ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ์„ธ๊ทธ๋จผํŠธ(์„œ๋ž)์— ์–ด๋–ค ๋ฐ์ดํ„ฐ(์˜ท)์ด ๋“ค์–ด๊ฐ€๊ณ , ๊ทธ ์„ธ๊ทธ๋จผํŠธ์˜ ํŠน์ง•์€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž! ์—ฌ๊ธฐ์„œ๋Š” ์นœ๊ทผํ•˜๊ฒŒ ์นœ๊ตฌ ๋ฐฉ์‹์œผ๋กœ ์“ฐ๊ฒ ๋‹ค ๐Ÿ˜™

๐Ÿ‘ฉ‍๐Ÿ’ป ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ

  • ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ(ex: ํ•จ์ˆ˜ ๋“ฑ)์ด ์ €์žฅ๋ผ!
  • ์‚ฌ์‹ค ์ฝ”๋“œ๋“ค์€ ์ปดํŒŒ์ผ ๋˜๋ฉด 5ab20ff ์ด๋Ÿฐ์‹์œผ๋กœ ์ด์ƒํ•œ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๊ฑฐ๋“ ~ ๊ทธ๋•Œ ์ด๋Ÿฌํ•œ ๊ธฐ๊ณ„์–ด๋“ค์„ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅํ•˜๊ฒŒ๋˜๋Š” ๋ฐฉ์‹์ด์•ผ!
  • ์ฝ๊ธฐ/์‹คํ–‰ ๊ถŒํ•œ์€ ์žˆ์ง€๋งŒ ์“ฐ๊ธฐ ๊ถŒํ•œ์€ ์—†์–ด! ์™œ๋ƒํ•˜๋ฉด ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋  ๊ฒฝ์šฐ ์•…์˜์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ์ด์ƒํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ฑฐ๋“ (๊ทธ๋Ÿฐ๋ฐ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์—์„œ๋Š” ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•˜๋˜๋ฐ.. ์–˜๋Š” ์™œ ๋˜์ง€? ๊ฐ‘์ž๊ธฐ ๊ณต๋ถ€ ํ•„์š”)
  • ์ฝ”๋“œ๋Š” ํ…์ŠคํŠธ์ด๋ฏ€๋กœ ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•ด~
int main(void) {
    printf("hi");
    return 0;
}


์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์ด ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋˜๋Š” ๊ฑฐ์ง€!


๐Ÿ“ƒ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ

์šฐ๋ฆฌ์˜ ๋‘๋ฒˆ์งธ ์„œ๋ž, ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์•ผ!

  • ์—ฌ๊ธฐ์—๋Š” ์ด๋ฏธ ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ๋ณ€์ˆ˜ ํ˜น์€ ์ƒ์ˆ˜๋“ฑ์ด ์ €์žฅ๋ผ.
  • ๋‹น์—ฐํžˆ ์ฝ๊ธฐ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์–ด์žˆ๊ฒ ์ง€?

๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ๋Š” ๊ถŒํ•œ ๋ฐ ์šฉ๋„์— ๋”ฐ๋ผ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์–ด!

rodata (๐Ÿ“–)data (๐Ÿ“–โœ๏ธ)

  • Read-Only data์˜ ์•ฝ์ž์—ฌ์„œ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•ด!
  • ์ „์—ญ ์ƒ์ˆ˜ ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•˜๊ฒ ์ง€? ์ƒ์ˆ˜๋Š” ํ•œ๋ฒˆ ์„ ์–ธํ•˜๋ฉด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ ๋ง์ด์•ผ~

data (๐Ÿ“–โœ๏ธ)

  • ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ด!
  • ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ฒ ์ง€?



0๏ธโƒฃ BSS ์„ธ๊ทธ๋จผํŠธ

  • Block Started By Symbol Segment ์˜ ์•ฝ์ž
  • ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐ’์ด ‘์ •ํ•ด์ง€์ง€ ์•Š์€’ ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ์„ ์ €์žฅํ•ด!
  • ์ด๋Ÿฐ ๋ณ€์ˆ˜๋“ค์€ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋‹ค 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ๋Œ€! ๐Ÿ˜ฎ
  • ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์–ด!
int bss_data; //์ดˆ๊ธฐํ™” ์•ˆํ•ด์คฌ์œผ๋ฏ€๋กœ bss ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ๋จ
int main() 
{  printf("%d\n", bss_data);  // 0 (0์œผ๋กœ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ) 
	return 0;}


๐Ÿ“š ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ

์ด์ œ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ์•ผ! ๊ฑฐ์˜ ๋‹ค์™”์œผ๋‹ˆ ์กฐ๊ธˆ๋งŒ ํž˜๋‚ด์ž! ์—ฌ๊ธฐ์„œ ๋‚˜์˜ค๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŠธ๋กœ ์ข€ ๋” ์ž์„ธํžˆ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ด๋‹ˆ ๊ธฐ๋Œ€ํ•ด์ค˜ ๐Ÿ˜Š

  • ํ”„๋กœ์„ธ์Šค์˜ ์Šคํƒ์ด ์œ„์น˜ํ•˜๋Š” ์˜์—ญ์ด์•ผ!
  • ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜์–ด์žˆ์–ด
  • ํ•จ์ˆ˜์˜ ์ธ์ž (๋งค๊ฐœ๋ณ€์ˆ˜)๋‚˜ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ž„์‹œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋ผ.
  • ์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„(stack frame)์ด๋ผ๊ณ  ํ•ด
  • ์ฆ‰, ์Šคํ… ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ์Šคํƒ์ด ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์‹คํ–‰์ด๋˜๋Š”๋ฐ, ์ด ์Šคํƒ ํ”„๋ ˆ์ž„์€ ์‚ฌ์šฉ์ž์˜ ์ธํ’‹ ๋“ฑ์— ๋”ฐ๋ผ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ํฌ๊ธฐ ์˜ˆ์ธก์ด ๋ถˆ๊ฐ€๋Šฅํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ๋ถ„๊ธฐ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๊ฒ ์ง€? -> ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์—์„œ๋Š” ์œ ๋™์ ์œผ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๊ฒŒ ๋ผ. ๊ทธ๋ฆฌ๊ณ  ๋ถ€์กฑํ•ด์งˆ ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ํ™•์žฅํ•ด์ฃผ๊ฒŒ๋˜์ง€.
  • ์ฃผ์†Œ๊ฐ€ ์ค„์–ด๋“œ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ๋‚˜.(์œ—๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ!)
  • ์Šคํƒ ์˜์—ญ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๊ณ , ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•˜๊ฒŒ ๋ผ.
  • ๋ ˆ์ง€์Šคํ„ฐ๋‚˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ •๋ณด๋„ ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„(ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋‹ˆ ๊ณต๋ถ€ ํ•„์š”)
  • ๋ฐฐ์—ด๋„ ์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค๊ณ  ํ•ด(ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋‹ˆ ๊ณต๋ถ€ ํ•„์š”)

 

void func() {  //ํ•จ์ˆ˜์‹คํ–‰์‹œ ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
	int choice = 0; //์ด๋ ‡๊ฒŒ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ™์€ ์• ๋“ค์ด ์Šคํƒ์— ์ €์žฅ๋จ 
	scanf("%d", &choice);  

	if (choice)    //choice์— ๋”ฐ๋ผ์„œ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ ์ง€ ๋‹ฌ๋ผ์ง -> stack frame์€ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅ !!
		call_true();  
	else    
		call_false();  
	
	return 0;
	} //ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ํ–ˆ์œผ๋ฏ€๋กœ ์Šคํƒ ํ”„๋ ˆ์ž„ ํ•ด์ œ



๐Ÿฅž ํž™ ์„ธ๊ทธ๋จผํŠธ

  • ํž™ ์„ธ๊ทธ๋จผํŠธ์—๋Š” ํฌ์ธํ„ฐ๋“ค์ด ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด ์ €์žฅ๋ผ!
  • Java ๋‚˜ C++ ๋“ฑ์—์„œ๋Š” 'new' ๋ฅผ ํ†ตํ•ด, C์—์„œ 'malloc', 'calloc' ๋“ฑ์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด ํž™์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์•ผ!
  • ์Šคํƒ๊ณผ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ! (์•„๋ž˜๋ฐฉํ–ฅ์ด์ง€๋งŒ ์ฃผ์†Œ๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๋ฐฉํ–ฅ์ด์•ผ)
  • calloc(), malloc() ๋“ฑ์— ์˜ํ•ด ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด ์—ฌ๊ธฐ ์žˆ์–ด! ํฌ์ธํ„ฐ๋Š” ์Šคํƒ์— ์žˆ์œผ๋‹ˆ ํ—ท๊ฐˆ๋ฆฌ์ง€๋ง๊ตฌ!
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘(Runtime)์— ๊ฒฐ์ •๋ผ!
  • ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์–ด!
๊ทธ๋ ‡๋‹ค๋ฉด ํž™๊ณผ ์Šคํƒ์€ ์™œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ผ๋Š” ๊ฑธ๊นŒ?

ํž™๊ณผ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋™์ผํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๋ž€๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ๋งŒ์•ฝ ํ• ๋‹น๋œ ํž™ ์„ธ๊ทธ๋จผํŠธ์˜ ์–‘์„ ๋‹ค ์ผ๋‹ค๋ฉด ์ด๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ ๋ถ€๋ถ„์„ ์นจ๋ฒ”ํ•˜๊ฒŒ ๋˜๊ฒ ์ง€?
ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์„œ๋กœ ์ž๋ผ๊ฒŒํ•˜๋ฉด ์ด๋Ÿฐ ์ถฉ๋Œ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์œ ๋กœ์›Œ์งˆ ์ˆ˜ ์žˆ๊ฒ ์ง€~

์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” heap_data_ptr์— malloc()์œผ๋กœ ๋™์  ํ• ๋‹นํ•œ ์˜์—ญ์˜ ์ฃผ์†Œ๋ฅผ ๋Œ€์ž…ํ•˜๊ณ , ์ด ์˜์—ญ(heap)์— ๊ฐ’์„ ์“ฐ๊ฒŒ๋ผ.

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

 

์ •๋ฆฌ

์„ธ๊ทธ๋จผํŠธ ์—ญํ•   ๊ถŒํ™˜  ์˜ˆ์‹œ
์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์˜์—ญ  r,x  int main(){...}
๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ  ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜ ๋ฐ ์ƒ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์˜์—ญ  r,w/r int a=0; int NUM 10;
 BSS ์„ธ๊ทธ๋จผํŠธ  ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ์˜์—ญ  r,w int a;
 ํž™ ์„ธ๊ทธ๋จผํŠธ  ๋™์  ํ• ๋‹น์„ ํ†ตํ•ด ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์˜์—ญ  r,w malloc(), calloc(), new()๋“ฑ์œผ๋กœ
ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ
 ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ  ์ž„์‹œ๋ณ€์ˆ˜ (ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜ ๋“ฑ)  r,w int fnc(int i){};์—์„œ i์˜ ๊ฐ’ ๋“ฑ

 

์˜ˆ์ œ

#include <stdlib.h>
int a = 0xa; //a๋Š” ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ๋ณ€์ˆ˜์ด๋ฏ€๋กœ data ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ
const char b[] = "d_str"; //"d_str"๋Š” ์ดˆ๊ธฐํ™”๋œ ์ƒ์ˆ˜์ด๋ฏ€๋กœ rodata ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ
int c; //์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ BSS ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ
int foo(int arg) { //foo()ํ•จ์ˆ˜๋Š” ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ
  int d = 0xd; //d๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์Šคํƒ์— ์ €์žฅ
  return 0;
}
int main() //main()ํ•จ์ˆ˜๋Š” ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ
{
  int *e = malloc(sizeof(*e)); //e๋Š” ์Šคํƒ์—, e๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํž™์˜ ๋ฉ”๋ชจ๋ฆฌ
  return 0;
}

 

์˜ค๋Š˜์€ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์—์„œ ์ค‘์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŠธ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๊ด€๋ จ ํฌ์ŠคํŒ…์ด ๋  ์˜ˆ์ •์ด๋‹ค.

 

 

 

 

 

 

Reference

https://dreamhack.io/
์‹œ์Šคํ…œ ํ•ดํ‚น stage 2 ๊ณต๋ถ€ ๋‚ด์šฉ ์ •๋ฆฌ

 

ํ•ด์ปค๋“ค์˜ ๋†€์ดํ„ฐ, Dreamhack

ํ•ดํ‚น๊ณผ ๋ณด์•ˆ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์‹ถ์€ ํ•™์ƒ, ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž, ๋ณด์•ˆ ์ง€์‹๊ณผ ์‹ค๋ ฅ์„ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œํ‚ค๊ณ  ์‹ถ์€ ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๊นŒ์ง€ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜๊ณ  ์—ฐ์Šตํ•˜๋ฉฐ ์ง€์‹์„ ๋‚˜๋ˆ„๊ณ  ์‹ค๋ ฅ ํ–ฅ

dreamhack.io

https://badayak.com/entry/C%EC%96%B8%EC%96%B4-%ED%95%A8%EC%88%98-%EB%82%B4-%EB%B0%B0%EC%97%B4%EC%9D%80-%EC%96%B8%EC%A0%9C-%EC%83%9D%EC%84%B1%EB%90%A0%EA%B9%8C

 

C์–ธ์–ด ํ•จ์ˆ˜ ๋‚ด ๋ฐฐ์—ด์€ ์–ด๋””์— ์ƒ์„ฑ๋ ๊นŒ?

C์–ธ์–ด์˜ ๋ฐฐ์—ด ์ƒ์„ฑ ์œ„์น˜์— ๋Œ€ํ•œ ์˜คํ•ด C์–ธ์–ด์— ๋Œ€ํ•ด ์–ด๋Š ์ •๋„ ์ž์‹ ์ด ์ƒ๊ฒผ๋Š”๋ฐ๋„ ํ™•์‹คํžˆ ์•Œ์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ƒ์„ฑ๋˜๋Š” ๋ฐฐ์—ด ๋ณ€์ˆ˜๋Š” ์–ด๋””์— ์ƒ์„ฑ๋ ๊นŒ์— ๋Œ€ํ•œ ํ˜ธ๊ธฐ์‹ฌ์ž…๋‹ˆ๋‹ค. c

badayak.com

 

profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!