1583, 13/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   wolverine
   [ÀÚÀÛ] C °­ÁÂ [3] - Variable & Memory

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=2035 [º¹»ç]


À̹ø Àå¿¡¼­´Â º¯¼ö¿Í ¸Þ¸ð¸®ÀÇ °ü°è¸¦ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.

º¯¼ö´Â
- local variable(Áö¿ªº¯¼ö)
- global variable(Àü¿ªº¯¼ö)
·Î ³ª´µ¾î Áý´Ï´Ù.

local variableÀº function(ÇÔ¼ö) ³»¿¡¼­ ¼±¾ðµÇ´Â º¯¼öÀÔ´Ï´Ù.
global variableÀº ÇÔ¼ö ¹Û¿¡¼­ ¼±¾ðµÇ´Â º¯¼ö ÀÔ´Ï´Ù.

int g1;
short g2;

void function1(void)
{
    int a;
    short b[10];
    char c[20];

    ....

}

À§ÀÇ ¿¹Á¦¿¡¼­ º¯¼ö a,b,c´Â ¸ðµÎ local variableÀ̸ç,
¸ðµç local variableÀº stack ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

º¯¼ö g1,g2´Â ¸ðµÎ global variableÀ̸ç,
¸ðµç ÃʱâÈ­ µÇÁö ¾ÊÀº global variableÀº ±âº»ÀûÀ¸·Î .bss ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

¸¸¾à float pi = 3.141592; ¿Í °°ÀÌ piÀÇ ¼±¾ð°ú µ¿½Ã¿¡ ÃʱâÈ­°¡ µÇ¾ú´Ù¸é,
ÀÌ º¯¼ö´Â .data ¿µ¿ª¿¡ ÇÒ´çÀÌ µË´Ï´Ù.

2Àå¿¡¼­ linker command fileÀ» ÅëÇؼ­ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ memoryÀÇ ±¸Á¶¿Í
°¢°¢ÀÇ ¿µ¿ªº°·Î ½ÃÀÛ¹øÁö/Å©±â¸¦ ¼³Á¤ÇØÁØ´Ù°í ¹è¿ü½À´Ï´Ù.

¸¸¾à local º¯¼ö¸¦ ¾ÆÁÖ Å« »çÀÌÁî·Î ¼±¾ðÇÏ¸é ¾î¶»°Ô µÉ±î¿ä?

void function(void)
{
     int b[100000];
     ....
}

ÀÌ·¸°Ô ¼±¾ðÀ» Çϸé compiler¿¡ Á¾·ù¿¡ µû¶ó¼­ warningÀ» ³»ÁÖ´Â °æ¿ìµµ ÀÖ°í,
±×·¸Áö ¾ÊÀº °æ¿ìµµ ÀÖ½À´Ï´Ù.
ÇÏÁö¸¸, stackÀÇ Å©±â¸¦ ³Ñ¾î¼­´Â local º¯¼ö¸¦ À§¿Í °°ÀÌ ¼±¾ðÇÏ°í,

for(i=0; i<100000; i++) b[i] = i;

¿Í °°Àº code°¡ ÇÔ¼ö ³»¿¡¼­ ¼öÇàÀÌ µÈ´Ù°í °¡Á¤Çϸé, ¹«½¼ ÀÏÀÌ ÀϾ±î¿ä?

»ç½Ç processor°¡ program¸¦ Á÷Á¢ ½ÇÇàÇÏ´Â Áß¿¡´Â Áö±Ý ³»°¡ access(read/write)ÇÏ´Â ¿µ¿ªÀÌ
stackÀÎÁö, ¾Æ´Ï¸é ´Ù¸¥ ¿µ¿ªÀÎÁö Àß ¾ËÁö ¸øÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù.
À§¿Í °°Àº °æ¿ì´Â ½ÇÁ¦·Î, b[i]ÀÇ ¸ðµç ¹øÁö¿¡ i°ªÀÌ ÀúÀåµÇ°í,
¸¸¾à stackÀ» ³Ñ¾î¼­´Â ¿µ¿ªÀÌ¶óµµ i°ªÀÌ ÀúÀåµÇ°Ô µË´Ï´Ù.

stack°ú ÀÎÁ¢ÇÑ memory¿¡ ´Ù¸¥ ¿µ¿ªÀÌ À§Ä¡ÇÏ°í ÀÖ´Ù¸é,
±× ¿µ¿ª¿¡ ÇÒ´ç µÇ¾î ÀÖ´Â º¯¼ö³ª Äڵ带 i °ªÀ¸·Î ¹Ù²Ù°Ô µÇ°í,
°á°úÀûÀ¸·Î programÀÇ Á¤»óÀûÀÎ ¼öÇàÀ» ¸øÇÏ°Ô ¸¸µé¾î ¹ö¸³´Ï´Ù.

ÀÌ¿Í °°Àº °æ¿ì¸¦ stack overflow¶ó°í ÇÕ´Ï´Ù.

µû¶ó¼­, Å« Å©±âÀÇ ¹è¿­(array)´Â °¡´ÉÇÑ local º¯¼ö¿¡ ÇÒ´çÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

¹Ý¸é¿¡ global variableÀº ÇÁ·Î±×·¥ Á¾·á½Ã±îÁö memory¿¡ ÇÒ´çÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù.
Å©±â°¡ Å« global variableµéÀÌ ÇÁ·Î±×·¥ Áß°£ Áß°£¿¡¸¸ »ç¿ëÀÌ µÇ´Â °æ¿ì´Â
memory ÀÔÀå¿¡¼­´Â ³¶ºñ°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.

stack¿¡ ÇÒ´çµÈ local variableÀº ÇÔ¼öÀÇ ½ÃÀÛ~³¡, Áï ÇÔ¼ö°¡ ½ÇÇàµÇ´Â µ¿¾È¿¡¸¸
stack¿¡ ÀÚ¸®Àâ±â ¶§¹®¿¡, ¸Þ¸ð¸® »çÀÌÁî ÀÔÀå¿¡¼­´Â ÈξÀ °æÀçÀûÀÔ´Ï´Ù.

Áï, function1 ÀÇ int a[100] µµ stack ¿¡ ÇÒ´çÀÌ µÇ°í,
function2ÀÇ int b[100]µµ stack¿¡ ÇÒ´çÀÌ µË´Ï´Ù.
ÁÖ¾îÁø stack °ø°£À» ³Ñ¾î¼­Áö¸¸ ¾Ê´Â´Ù¸é
ÇÔ¼ö ³»¿¡¼­ ±×¶§ ±×¶§ ÇÊ¿äÇÑ º¯¼öµéÀº µ¿ÀÏÇÑ stackÀ̶ó´Â °ø°£À»
°è¼ÓÀûÀ¸·Î È°¿ëÇÏ°Ô µË´Ï´Ù

ÇÏÁö¸¸, function1¿¡¼­¸¸ ÀÌ¿ëµÇ´Â int a[100]°ú
function2¿¡¼­¸¸ ÀÌ¿ëµÇ´Â int b[100]À»
global variable·Î ¼±¾ðÇÏ°Ô µÇ¸é
ÇÁ·Î±×·¥ÀÇ ³¡ÀÌ ³¯¶§±îÁö Ç×»ó ¸Þ¸ð¸®¿¡ a[100]°ú b[100]ÀÌ
ÀÚ¸®Àâ°í ÀÖ°Ô µÇ¾î ¸¹Àº ³¶ºñ°¡ µË´Ï´Ù.

NOTE:
ÀÌ·¯ÇÑ °ÍµéÀ» ÇØ°áÇϱâ À§Çؼ­ dynamic memory allocation À̶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù.
ÃßÈÄ °­Á¿¡¼­ ¼³¸íÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

À̹ø Àå¿¡¼­´Â Àü¿ª º¯¼ö/Áö¿ª º¯¼ö¿Í ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¾Ò½À´Ï´Ù.
½ÇÁ¦·Î debugger¸¦ ÅëÇؼ­,
°¢°¢ÀÇ º¯¼öÀÇ address¸¦ Çѹø »ìÆì º¸½Ã¸é,
À§¿Í °°Àº ±ÔÄ¢¿¡ ÀÇÇؼ­ address°¡ ÇÒ´çÀÌ µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.

Best Regards,
Wolverine


























  Hit : 6317     Date : 2012/07/05 11:56



    
pkw5240 ļ ¤¾¤¾
»ç½Ç processor°¡ program¸¦ Á÷Á¢ ½ÇÇàÇÏ´Â Áß¿¡´Â Áö±Ý ³»°¡ access(read/write)ÇÏ´Â ¿µ¿ªÀÌ
stackÀÎÁö, ¾Æ´Ï¸é ´Ù¸¥ ¿µ¿ªÀÎÁö Àß ¾ËÁö ¸øÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÔ´Ï´Ù.
À§¿Í °°Àº °æ¿ì´Â ½ÇÁ¦·Î, b[i]ÀÇ ¸ðµç ¹øÁö¿¡ i°ªÀÌ ÀúÀåµÇ°í,
¸¸¾à stackÀ» ³Ñ¾î¼­´Â ¿µ¿ªÀÌ¶óµµ i°ªÀÌ ÀúÀåµÇ°Ô µË´Ï´Ù

À̸» Á¤¸» ÀÌÇØ°¡ Àß°¡°ÔÇØÁֳ׿ä!
´öºÐ¿¡ ½ºÅÿÀ¹öÇ÷ο쿡´ëÇØ È®½ÇÈ÷ ¾Ë¾Ò¾î¿ä!! °¨»çÇØ¿ä
2012/07/11  
wolverine ½ÇÁ¦ Çö¾÷¿¡¼­µµ °³¹ß½Ã¿¡ °¡²û Àú·± ¹®Á¦·Î °í»ýÀ» ÇÒ °æ¿ìµµ ÀÖ½À´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
2012/07/11  
1343   [ÀÚÀÛ] C °­ÁÂ [4] - Dynamic Memory Allocation[2]     wolverine
07/06 5945
  [ÀÚÀÛ] C °­ÁÂ [3] - Variable & Memory[2]     wolverine
07/05 6316
1341   [ÀÚÀÛ] C °­ÁÂ [2] - Memory Allocation[1]     wolverine
07/05 7527
1340   [ÀÚÀÛ] C °­ÁÂ [1] - Compiler Tool Chain[4]     wolverine
07/04 7900
1339   À¯´Ð½º ÇØÅ·ÀÇ ±âº» SetUID[3]     wnstndp
07/25 7294
1338   ù°æÇè ºñi¾Æ±×¶ó ¸Ô°í »çÃÌ´©³ª¶û[2]     wngkssk
06/20 8560
1337   ÇØÅ· °ü·Ã »çÀÌÆ® ¸ñ·ÏÀÔ´Ï´Ù.[12]     wlwjsan
11/09 24563
1336   ÇØÅ·µÇ°íÀÖ´ÂÁö ¾Ë¾Æº¸ÀÚ (Æß)[8]     wlsgh8983
03/10 9090
1335   ÇØÄ¿½ºÄð °¡ÀÔÇÑ »ç¶÷ÀÔ´Ï´Ù[1]     wldud
02/19 8161
1334   ű׶õ??[4]     wkrwjs002
08/20 6793
1333   ÇØÄ¿¶õ?[12]     wkrwjs002
08/20 6630
1332   ¿ö°ÔÀÓ »çÀÌÆ®ÀÔ´Ï´Ù. [4]     wkdqkf2
03/18 8296
1331   ¾È³çÇϼ¼¿ä?     wkdqkf2
03/18 6286
1330   ±¸±Û ¹é¸µÅ© ÀÛ¾÷ Áú¹®¿ä     wkatnxka
03/30 3425
1329   [¸Ó¸®¼Ó] push ebp mov ebp,esp¿¡...[2]     wjsqud011
08/18 8404
1328   [¸Ó¸®¼Ó] C¾ð¾î Æ÷ÀÎÅÍ¿Í ÇÔ¼ö¿¡ ´ëÇØ...[2]     wjsqud011
08/18 8471
1327   sdsdfdfgfh[4]     witched14
11/06 37894
1326   µµ¿ÍÁà¿ä~[3]     wishingstar
11/28 6256
1325   ¿ÀÇÁ¶óÀÎ ½ºÅ͵ðÀÇ ¼º°ú¹° 1. ½ºÅÃ[6]     windowhan
10/03 7245
1324   ¾Ë°í¸®Áò ½ºÅ͵ð ¸ðÁýÇÕ´Ï´Ù [´ëÀü][5]     windowhan
09/10 7007
[1]..[11][12] 13 [14][15][16][17][18][19][20]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org