Buffer Overflow? ¹öÆÛ ¿À¹öÇ÷οì(Buffer Overflow ).... ¸» ±×´ë·Î¸¦ ÀÌÇØÇغ¾½Ã´Ù. ¹öÆÛ°¡ ¿À¹öÇ÷οì(³ÑÄ£´Ù)µÈ´Ù.. Ä¿ÇÇÀÜ¿¡ Äݶó 1.5¸®ÅÍÂ¥¸®¸¦ ¸ðµÎ ´Ù ³ÖÀ¸·Á°í Çغ¸¼¼¿ä. ´ç¿¬È÷ ³ÑÄ¡ÁÒ? ÀÌ°Ô ¹Ù·Î ¹öÆÛ ¿À¹öÇ÷οì¶ø´Ï´Ù. À̰Ŷû ¹«½¼ »ó°üÀÌ ³Ä±¸¿ä? ÀÌÇØÇÏ·Á¸é ´ç¿¬È÷ ÀÌ·¸°Ô¶óµµ »ý°¢ÇϽñæ.. ÀÌ·± °ÍµéÀÌ ¿Ö ÇÊ¿ä°¡ ÀÖÀ»±î¿ä? ÇÁ·Î±×·¥ÀÇ ±¸Á¶ÀûÀÎ Â÷¿ø¿¡¼­ Çѹø º¼±î¿ä? ÇÁ·Î±×·¥À» Â¥º» »ç¶÷Àº ¾Ë²¨¿¡¿ä. ¾ÈÂ¥ºÁµµ ¾Ë°ÚÁö¸¸.. main() ÇÔ¼ö¶ó´Â °ÍÀÌ ÀÖÀ¸¸ç ¹Ýµå½Ã Á¸ÀçÇØ¾ß ÇÁ·Î±×·¥ÀÌ µ¹¾Æ°¡°ÚÁÒ. ÀÌ·± ÇÁ·Î±×·¥ ¼Ò½º¸¦ º¸¼¼¿ä.. main() { printf("hello\n\n"); } ÀÚ. ÀÌ°ÍÀ» ÄÄÆÄÀÏ Çغ¸¼¼¿ä. ´ç¿¬È÷ hello ¶ó´Â ¹®ÀÚ°¡ ³ª¿À°ÚÁÒ.. ¿Ö ³¡¿¡ \n(ÇÑÁÙ³»¸²)À» µÎ°³³ª Ç߳ı¸¿ä? Á¦ ¸¾À̶ø´Ï´Ù. :) À̹ø¿¡´Â Á»´õ Àç¹ÌÀÖ´Â °ÍÀ» Çغ¾½Ã´Ù. int test(void) { int i=100; i=i+1; return i; } void main(void) { int k; k = test(); /* (1) */ printf("Á¤´ä(?) :: %d \n",k); } ÀÌ ¼Ò½º¸¦ ÄÄÆÄÀÏÇؼ­ ½ÇÇàÇϸé ÀÌ·¸°Ô ³ª¿À°ÚÁÒ?? Á¤´ä(?) :: 101 ÀÌ·¸°Ô ³ª¿ÀÁÒ.. ¿©±â¼­ ¿ì¸®°¡ »çÀü Áö½ÄÀ» °¡Á®¾ß ÇÒ °ÍÀº ¿ì¼± main() ÇÔ¼ö°¡ ºÒ·ÁÁøÈÄ¿¡ main() ÇÔ¼ö¿¡¼­ test() ÇÔ¼ö¸¦ ºÒ·¶ÁÒ? ÀÌ°ÍÀº ´ç¿¬ÇÏ°ÚÁö¸¸ Á»´õ ½ÉµµÀÖ°Ô µé¾î°¡º¸¸é ¿©·¯°¡Áö Àç¹ÌÀÖ´Â °ÍµéÀ» ¾Ë ¼ö ÀÖ¾î¿ä.. Á¤´ä(?) :: 101 À̶ó´Â °ÍÀ» Ãâ·ÂÇϱâÀ§ÇØ ÇÁ·Î±×·¥Àº ÀÌ·¸°Ô ÇÔ¼ö¸¦ ¿òÁ÷ÀÌ°ÚÁÒ? main() --> test() --> main() --> Á¾·á ±×·±µ¥ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÇ¸é ¸Þ¸ð¸®¿¡ main() ÇÔ¼ö¿µ¿ª°ú test() ÇÔ¼ö¿µ¿ªÀÌ µû·Î ±¸ºÐµÇ¾î ³õ¿©Á® ÀÖ½À´Ï´Ù. ¸Þ¸ð¸®°¡ Àá½Ã ¿·À¸·Î ´©¿ö¼­ ÀÌ·± ÇüÅ·Πº¸ÀÎ´Ù°í »ý°¢Çغ¾½Ã´Ù. [ ] ±×·¯¸é main() ÇÔ¼ö¿Í test() ÇÔ¼ö°¡ ¸Þ¸ð¸®¿¡ ÇÒ´çµÇ¾î ¸Þ¸ð¸®¿¡ µé¾î°¡ ÀÖÀ»¶§ÀÇ È­ ¸éÀº ÀÌ·¸°ÚÁÒ? [ test() main() ] ÀÌÁ¦ Çѹø ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â ¼ø¼­´ë·Î °¡º¾½Ã´Ù. main()ÇÔ¼ö°¡ È£ÃâµÇ¾î ¸Þ¸ð¸®¿¡¼­ ÇöÀç ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â ÁöÁ¡ÀÌ main() À̶ó´Â ºÎºÐÀÏÅ×°í, °ð¹Ù·Î test()¸¦ È£Ãâ/* (1) */Ç߱⶧¹®¿¡ ÇöÀç ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â ÁöÁ¡ÀÌ test() ¶ó´Â ºÎºÐÀ¸·Î ¿òÁ÷ÀÌ°ÚÁÒ.. ±×¸®°í test() ÇÔ¼ö¿¡¼­ ÀÏÀÌ ´Ù ³¡³ª¸é ´Ù½Ã main() ÇÔ¼ö·Î ¿òÁ÷ÀÌ°í Á¤´ä(?) ¾î¼±¸¸¦ Ãâ·ÂÇÏ°í ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ°ÚÁÒ.. ±×·±µ¥ ¿©±â¼­ ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â ÁöÁ¡(Æ÷ÀÎÅÍ)°¡ main()À¸·Î °¬´Ù°¡ test()·Î °¬´Ù°¡ ´Ù½Ã main()À¸·Î °¡´Â ÀÏÀ» È¥ÀÚ¼­ ½º½º·Î ¿òÁ÷ÀÌ´Â °ÍÀº ºÒ°¡´ÉÇØ¿ä.. ¿Ö³Ä.. Áö´ÉÀÌ ÀÖ´Â »ç¶÷Àº ±×³É º¸°í¼­ main()°ú test()¸¦ ¿Ô´Ù°¬´Ù ÇÏÁö¸¸ ±â°è´Â ±×·¸Áö ¸øÇÏÁÒ.. ±×·¡¼­ »ý°¢Çس½°ÍÀÌ ¸Þ¸ð¸® ºÎºÐºÎºÐ¿¡ ÁÖ¼Ò(address)¸¦ ÇÒ´çÇÏ°í ÁÖ¼Ò¸¸ ÀÔ·ÂÇÏ¸é ±× ÁÖ¼Ò·Î °ð¹Ù·Î ¿òÁ÷ÀÏ ¼ö°¡ ÀÖ°ÔµÇÁÒ. ÇÏÁö¸¸ ±×·¡µµ ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â Æ÷ÀÎÅÍ´Â ¾ÆÁ÷ ¸ð¸£ÁÒ.. test()°¡ ¸Þ¸ð¸® ¾îµð¿¡ ÀÖ´ÂÁöµµ ¸ð¸£´Ï±î¿ä. ¶ÇÇÑ main()µµ ¾îµð¿¡ ¼û¾îÀÖ´ÂÁöµµ ¸ð¸£°í.. ±×·¡¼­ ¶Ç(?) »ý°¢ÇÑ°ÍÀÌ ¸®ÅÏ ¾îµå·¹½º¶ó´Â ºÎºÐÀÔ´Ï´Ù. ±×·¯´Ï±ñ, tset() ¶ó´Â ÇÔ¼ö°¡ ¸Þ¸ð¸®¿¡ ÇÒ´çµÇ±âÀü¿¡ ÀÚ½ÅÀ» ºÒ·¶´ø main()ÇÔ¼öÀÇ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ ±â¾ïÇÏ°í ÀÖ½À´Ï´Ù. ±×·¡¾ß ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â Æ÷ÀÎÅÍ°¡ test() ·Î °¬´Ù°¡ ´Ù½Ã main()À¸·Î µ¹¾Æ°¥²¨ ¾Æ´Ñ°¡¿ä? ¸¸¾à ±× ÀúÀåµÈ ¸®ÅÏ ¾îµå·¹½º°¡ ¾û¶×ÇÑ ºÎºÐ.. ±×·¯´Ï±ñ main()ÇÔ¼ö¸¦ °¡¸£Å°Áö ¾Ê°í ¾û¶×ÇÑ °÷À» °¡¸£Å²´Ù¸é ¿µ¶ô¾øÀÌ ¿¡·¯°¡ ³ª¸é¼­ ÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î µ¹¾Æ°¡°ÚÁÒ. ÇÁ·Î±×·¥ÀÌ ¿òÁ÷ÀÌ´Â Æ÷ÀÎÅÍ°¡ ¾û¶×ÇÑ ¸®ÅϾîµå·¹½º·Î ¸Þ¸ð¸®ÀÇ ÀÌ»óÇÑ ºÎºÐÀ» °Çµå¸®°ÔµÇ¸é ¿¡·¯°¡ ³ª´Âµ¥ ÀÌ°Ô ¹Ù·Î ¼¼±×¸ÕÅ×ÀÌ¼Ç ¿À·ùÀÔ´Ï´Ù. (ÀÌ·¸°Ô ³ª¿Í¿ä. Segmentation fault) ±×·¯´Ï±ñ ¾ðÁ¦³ª ÀÚ½ÅÀ» È£ÃâÇÑ ºÎ¸ðÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ¸®ÅϾîµå·¹½º°¡ »ý°¢ÇÏ°í 100% ¾ÈÀüÇÏ°Ô ÁöÅ°°í ÀÖ¾î¾ß ÇÏÁÒ. (test()ÇÔ¼öÀÇ °æ¿ì ºÎ¸ðÇÔ¼ö´Â ´ç¿¬È÷ main() ÇÔ¼ö°ÚÁÒ???) ¸®ÅϾîµå·¹½º°¡ ¿Ö Àִ°¡¿¡ ´ëÇؼ­´Â ¼³¸íÀ» Çß°í, À̹ø¿¡´Â test() ÇÔ¼ö°¡ ¸Þ¸ð¸®¿¡ ÇÒ´çµÇ¾îÀÖ´Â ¸ð½ÀÀ» Á»´õ ¸Á¿ø°æÀ» °¡Á®´Ù ´ë°í ´õ °¡±îÀÌ ÁöÄѺ¾½Ã´Ù. test() ÇÔ¼ö°¡ ¸Þ¸ð¸®¿¡ ÇÒ´çµÇ¾îÀÖ´Â °ÍÀ» Á»´õ È®´ë½ÃÄѼ­ º¸¸é [ º¯¼ö¿¡ °ü·ÃµÈ°ÍÀ» ÀúÀå ¸®ÅϾîµå·¹½º(ret) ] <= test() ÀÌ·± ÇüÅ·ΠÀÖ´ä´Ï´Ù. ¸®ÅϾîµå·¹½º´Â Á¶±â °¡Àå µÞÂÊ¿¡ ²¿ºÒÃÄ ³õ°íÀÖ¾î¿ä.. ¾Æ±î test() ÇÔ¼ö¸¦ º¸¸é int i; ¶ó´Â ºÎºÐÀÌ Àִµ¥ ÀÌ°ÍÀÌ ¹Ù·Î º¯¼ö¸¦ ¼³Á¤ÇÏ´Â ºÎºÐÀÌÁÒ.. ±×·¡¼­ test()ÀÇ ¸Þ¸ð¸®´Â ÀÌ·¸°Ô µÇ°ÚÁÒ.. [ (i º¯¼ö ¿µ¿ª) ret(¸®ÅϾîµå·¹½º)] ±×·±µ¥ ¹¦ÇÑ°ÍÀº i º¯¼ö°¡ Á¡Á¡ Ä¿Áö°ÔµÇ¸é ÀÌ·¸°Ô µÇ¿ä.. [ (i º¯¼ö ¿µ¿ª) ret(¸®ÅϾîµå·¹½º)] [ (i º¯¼ö ¿µ¿ª))) ret(¸®ÅϾîµå·¹½º)] Á»´õ... ^^; [ (i º¯¼ö ¿µ¿ª))))) ret(¸®ÅϾîµå·¹½º)] [ (i º¯¼ö ¿µ¿ª))))))) ret(¸®ÅϾîµå·¹½º)] Á¶±Ý´õ..... [ (i º¯¼ö ¿µ¿ª)))))))))ret(¸®ÅϾîµå·¹½º)] ¾î¾ù. ¿©±â±îÁã.. º¸¼¼¿ä.. iº¯¼ö ¿µ¿ªÀÌ °è¼Ó Ä¿Áö´Ù º¸´Ï±ñ ¸®ÅϾîµå·¹½º ºÎºÐ±îÁö °è¼Ó È®ÀåµÇÁÒ? ¿©±â¼­ ÁÖÀÇ ±í°Ô º¼ ºÎºÐÀº i º¯¼ö ¿µ¿ªÀº ±×´ë·ÎÀε¥ º¯¼ö¾È¿¡ µé¾î°¡´Â ³»¿ëÀÌ Á¡Á¡ Ä¿Á®¼­ °è¼Ó ºÎÇ®¾î ¿Ã¶ó°¡´Â ¸ð½ÀÀÌ¿¡¿ä.. ÀÌÁ¦ Á»´õ Ä¿Áö°ÔµÇ¸é ¾î¶»°Ô µÉ±î¿ä? ÇÏÇÖ.. ¸®ÅÏ ¾îµå·¹½º ºÎºÐÀÌ i º¯¼ö ³»¿ëÀ̶û °ãÄ¡°ÚÁÒ? ±×·¸°Ô µÇ¸é i º¯¼ö¿¡ ¾î¶² ÀÔ·ÂµÈ °ªÀÌ µé¾î°¡°Ô µÇ¸é ¸®ÅÏ ¾îµå·¹½º ºÎºÐµµ ¾û¶×ÇÑ ¼ýÀÚ·Î ¹Ù²î°Ô µÇ¾î ¿ø·¡ ÀúÀåµÈ main() ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ÀÒ¾î¹ö¸®°ÔµÇÁÒ. ±×·¯¸é ´ç¿¬È÷ ¿À·ù°¡ »ý±â¸é¼­ Segmentation fault °¡ ³ª°í ÇÁ·Î±×·¥ÀÌ Á×ÁÒ. ÀÌ°ÍÀÌ ¹Ù·Î ¹öÆÛ ¿À¹öÇ÷ο찡 ÀϾ ¿¹¶ø´Ï´Ù. ¿ø·¡ÀÇ iº¯¼ö ¿µ¿ª¿¡ µé¾î°¡´Â ³»¿ëÀÌ Á¡Á¡ Ä¿Á®¼­ ¸®ÅϾîµå·¹½º±îÁö °Çµå·Á ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¹¾Æ°¡Áú ¾Ê°ÔµÇÁÒ.. ±×·±µ¥ ÇØÅ·±â¹ýÁß¿¡ ÀÌ·± ºÎºÐÀÌ ÀÖÁÒ. ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°Ý±â¹ý(?)... ÀÌ·± ÇØÅ·±â¹ýÀº ¾Æ±î ¸»ÇÑ ¸®ÅÏ ¾îµå·¹½ººÎºÐÀ» ¿øÇÏ´Â ¸Þ¸ð¸® ÁÖ¼Ò·Î °¡°Ô ÇÏ°í ±× ºÎºÐ¿¡ ¾û¶×ÇÑ ÇÁ·Î±×·¥À» ¿Ã·Á³õ°í ±×°ÍÀÌ ½ÇÇàµÇµµ·Ï ÇÏ´Â °Å¶ø´Ï´Ù.. ¾Æ±îÀÇ°æ¿ì¸¦ º¸¸é main() -> test() -> main() ÀÌ·¸°Ô °¡ÁÒ? ÇÏÁö¸¸ ÇØÅ·±â¹ýÀ» ÀÌ¿ëÇϸé main() -> test() -> ÇØÄ¿°¡ ¸¸µçÇÔ¼ö ȤÀº ÇÁ·Î±×·¥ºÎºÐ ÀÌ·¸°Ô ÇÑ´ä´Ï´Ù.. ÀÌÁ¦ ¾Æ¼ÌÁÒ? ¿ÏÀü Ⱦ¼³¼ö¼³ÇÑ°ÇÁö...^^; ÀÌÇØÇϱæ