À©µµ¿ì¿¡¼­ÀÇ ½ºÅà ±â¹Ý ¿À¹öÇ÷οì Part2 - ÀͽºÇ÷ÎÀÕ ÀÛ¼ºÀ» À§ÇÑ À©µµ¿ìÁî ¾î¼Àºí¸® ÀúÀÚ : 31st May, 2005 Nish Bhalla. ¹ø¿ª : 2011/6/6. dakuo.(dakuo@naver.com) Ãâó : http://www.SecurityCompass.com ÀͽºÇ÷ÎÀÕ ÀÛ¼ºÀ» À§ÇÑ À©µµ¿ìÁî ¾î¼Àºí¸® : Part 2 / 4 ´ÙÀ½ ¼½¼Ç¿¡¼­´Â ÀͽºÇ÷ÎÀÕ ÀÛ¼º¿¡ ´õ ³ªÀº ÀÌÇظ¦ ¾òÀ» ¼ö ÀÖ°Ô ÇÊ¿äÇÑ X86 ¾î¼Àºí¸® ¾ð¾îÀÇ ±âÃʸ¦ ´Ù·ç°í ÀÖ½À´Ï´Ù. öÀúÇÑ ¾î¼Àºí¸® ¾ð¾î ¼ö¾÷Àº ¾Æ´Õ´Ï´Ù; ÇÏÁö¸¸ ¾î¼Àºí¸®ÀÇ ½ÃÀÛ°ú ¾î¼Àºí¸® ¸í·É¾î Àб⸦ ¾ò½À´Ï´Ù. ·¹Áö½ºÅÍ ½ÇÁ¦ ¾î¼Àºí¸® ¿¹Á¦¸¦ º¸±â Àü¿¡ ¾î¼Àºí¸® ¾ð¾î¿¡ ´ëÇÑ ¾à°£ÀÇ ¹è°æ°ú ¿ë¾î¿¡ ´ëÇÑ ±â´ë ¼öÁØÀ» ¾òÀ¾½Ã´Ù. ¾î¼Àºí¸® ¾ð¾î´Â ±â°è ÄÚµåÀÇ »ó¡Àû Ç¥ÇöÀÔ´Ï´Ù. ±â°è ÄÚµå a.k.a.Op Code(ÀÛµ¿ ÄÚµå)´Â ºñÆ® ¹®ÀÚ¿­·Î ¸í·É¾î ÄÚµåÀÔ´Ï´Ù. CPU´Â ¸Þ¸ð¸®¿¡ ·Îµå µÇ¾î ½ÇÇà °¡´ÉÇÑ ÀÌ·¯ÇÑ ¸í·É¾î¸¦ ½ÇÇàÇÕ´Ï´Ù. ÀϹÝÀûÀÎ ÇÁ·Î±×·¥Ã³·³ CPU´Â Àӽà ÀúÀå¼Ò¿¡ Á¤º¸¸¦ ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. ·¹Áö½ºÅÍ´Â CPU¸¦ À§ÇÑ Àӽà ÀúÀå¼ÒÀÔ´Ï´Ù. ÇÁ·Î¼¼¼­°¡ Á÷Á¢ ¸Þ¸ð¸®(RAM)¿¡ µ¥ÀÌÅ͸¦ ÀÛµ¿ÇÒ ¼ö ÀÖÁö¸¸, µ¥ÀÌÅÍ°¡ ·¹Áö½ºÅÍ(CPUÀÇ ÀÓ½ÃÀúÀå¼Ò)¿¡ ÀúÀåµÇ¾î ÀÖ´Â °æ¿ì ¸í·É¾î´Â »¡¸® ½ÇÇàµË´Ï´Ù. ·¹Áö½ºÅÍ´Â ¼öÇàÇÏ´Â ±â´É¿¡ µû¶ó ºÐ·ùµË´Ï´Ù. ÀϹÝÀûÀ¸·Î 16 °¡Áö Á¾·ùÀÇ ·¹Áö½ºÅÍ°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ·¹Áö½ºÅÍ´Â ³× °¡Áö ÁÖ¿ä À¯ÇüÀ¸·Î ºÐ·ùµË´Ï´Ù; Áï, ¹ü¿ë ·¹Áö½ºÅÍ; ÀÛ¾÷¿¡ ´ëÇÑ µ¥ÀÌÅ͸¦ °¡Áö´Â ·¹Áö½ºÅÍ, ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ; µ¥ÀÌÅÍ ¶Ç´Â ¸í·É¾îÀÇ ÁÖ¼Ò¸¦ °¡Áö´Â ·¹Áö½ºÅÍ, »óÅ ·¹Áö½ºÅÍ; ÇöÀç »óŸ¦ À¯ÁöÇÏ°Ô µµ¿ÍÁÖ´Â ·¹Áö½ºÅÍ¿Í EIP ·¹Áö½ºÅÍ; ½ÇÇàÇØ¾ß ÇÏ´Â ´ÙÀ½ ¸í·É¾îÀÇ Æ÷ÀÎÅ͸¦ ÀúÀåÇÏ´Â ·¹Áö½ºÅÍ ÀÌ ¼½¼Ç¿¡¼­ ´Ù·ê ·¹Áö½ºÅÍ´Â ÁÖ·Î ÀͽºÇ÷ÎÀÕ ÀÛ¼º°ú ÀÌÇØÇϴµ¥ »ç¿ëµÇ´Â ·¹Áö½ºÅÍÀÔ´Ï´Ù. ·¹Áö½ºÅÍÀÇ ´ëºÎºÐÀ» »ó¼¼È÷ ¼³¸íÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÁÖ·Î ¹ü¿ë ·¹Áö½ºÅÍ¿Í EIP ·¹Áö½ºÅ͸¦ ÁÖÀÇ ±í°Ô º¼ °ÍÀÔ´Ï´Ù. ¹ü¿ë ·¹Áö½ºÅÍ; EAX, EBX, ECX, EDX, EDI, ESI, ESP & EBP °¡ ÀϹÝÀûÀÎ µ¥ÀÌÅÍ Á¶ÀÛÀ» À§ÇØ Á¦°øµË´Ï´Ù. "E"´Â 8086 8 ºñÆ® ·¹Áö½ºÅÍ°¡ ¹Ù·Î ¸ÅÇ뵃 ¼ö ÀÖ´Â ¿ÏÀüÇÑ 32-ºñÆ® ·¹Áö½ºÅÍÀÇ ÁÖ¼Ò È®ÀåÀ» ÀǹÌÇÕ´Ï´Ù. 32 ºñÆ® ·¹Áö½ºÅÍ¿¡ 8 ºñÆ® ·¹Áö½ºÅÍ°¡ ¸ÅÇεǴ °ÍÀ» ¾Æ·¡¿¡¼­ º¸¿©ÁÝ´Ï´Ù. (8 ºñÆ® ¶Ç´Â 16 ºñÆ® ·¹Áö½ºÅÍ¿¡ ´ëÇÑ ¼¼ºÎ »çÇ×Àº IA-32 ÀÎÅÚ ¾ÆÅ°ÅØó ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ ¸Å´º¾óÀÌ ÁÁÀº ±âÁØÀÔ´Ï´Ù; Basic Architecture, Order Number 245470-012 available form http://developer.intel.com/design/processor/) 32 ºñÆ® ·¹Áö½ºÅÍ / 16 ºñÆ® ·¹Áö½ºÅÍ / 8 Bit Mapping(0-7) / 8 Bit Mapping(8-15) EAX AX AL AH EBX BX BL BH ECX CX CL CH EDX DX DL DH ESP SP EBP BP ESI SI EDI DI ÀÌ ¹ü¿ë ·¹Áö½ºÅÍÀÇ ±¸¼º¿¡ Àε¦½Ì ·¹Áö½ºÅÍ¿Í ½ºÅà ·¹Áö½ºÅÍ°¡ Ãß°¡ µî·ÏµÇ¾ú½À´Ï´Ù. 32 ºñÆ® ·¹Áö½ºÅÍ´Â Àüü 32 ºñÆ® °ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î 0x41424344 °ªÀÌ EAX ·¹Áö½ºÅÍ¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸é, EAX¿¡ ´ëÇÑ ÀÛ¾÷À» ¼öÇàÇÒ ¶§ 0x41424344ÀÇ Àüü °ª¿¡ ´ëÇØ ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù, ÇÏÁö¸¸ ´ë½Å¿¡ AX¿¡ Á¢±ÙÇÏ¸é ¿ÀÁ÷ 0x4142 ¸¸ ÀÛ¾÷¿¡ ¾²À̸ç, AL¿¡ Á¢±ÙÇÏ¸é ´ÜÁö 0x41 ¸¸ ¾²ÀÌ°í, AH¿¡ Á¢±ÙÇÏ¸é ¿ÀÁ÷ 0x42¸¸ ¾²ÀÔ´Ï´Ù. ÀÌ´Â ½©Äڵ带 ÀÛ¼ºÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. Àε¦½Ì ·¹Áö½ºÅÍ EDI¿Í ESI ·¹Áö½ºÅÍ°¡ Àε¦½Ì ·¹Áö½ºÅÍÀÔ´Ï´Ù; ÀϹÝÀûÀ¸·Î ¿øº»(EDI)°ú ¸ñÀûÁö(EDI) Æ÷ÀÎÅͷμ­ ¸Þ¸ð¸®¿¡ º¹»çµÉ ¶§ »ç¿ëµÇ´Â ¹®ÀÚ¿­ ¸í·É¾îÀÔ´Ï´Ù. ½ºÅà ·¹Áö½ºÅÍ EBP¿Í ESP ·¹Áö½ºÅÍ´Â ÁÖ·Î ½ºÅà Á¶ÀÛÀ» À§ÇØ »ç¿ëµË´Ï´Ù. EBP(ÀÌÀü ¼½¼ÇÀ» º¸¿©ÁÝ´Ï´Ù)´Â ½ºÅà ÇÁ·¹ÀÓÀÇ º£À̽º¸¦ °¡¸®Å°°í, ESP´Â ½ºÅÃÀÇ ÇöÀç À§Ä¡¸¦ °¡¸®Åµ´Ï´Ù. EBP´Â ÀϹÝÀûÀ¸·Î ½ºÅà ÇÁ·¹ÀÓ¿¡ °ªÀ» ÀúÀåÇÒ ¶§ ±âÁØÁ¡À¸·Î »ç¿ëµË´Ï´Ù.(example 1, hello.cpp ÂüÁ¶) ´Ù¸¥ ¹ü¿ë ·¹Áö½ºÅ͵é EAX´Â ¶ÇÇÑ °è»ê±â ·¹Áö½ºÅÍ·Î ºÒ¸®¸ç, °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ·¹Áö½ºÅÍ Áß ÇϳªÀÌ°í ¸¹Àº ¸í·ÉÀÇ °á°ú¸¦ Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. EBX´Â µ¥ÀÌÅÍ ¼¼±×¸ÕÆ® Æ÷ÀÎÅÍ ÀÔ´Ï´Ù. ECX´Â ÀϹÝÀûÀ¸·Î Ä«¿îÅÍ(for¹® µî)·Î »ç¿ëµË´Ï´Ù. EDX´Â I/O Æ÷ÀÎÅÍÀÔ´Ï´Ù. ÀÌ ³× °³ÀÇ ·¹Áö½ºÅ͵éÀº ¹ÙÀÌÆ®¸¦ ´Ù·ê ¼ö ÀÖ´Â À¯ÀÏÇÑ ·¹Áö½ºÅ͵é ÀÔ´Ï´Ù, Áï, ¹ÙÀÌÆ® ·¹º§·Î Á¢±Ù EIP ·¹Áö½ºÅÍ EIP ·¹Áö½ºÅÍ´Â ½ÇÇàÇØ¾ß ÇÏ´Â ´ÙÀ½ ¸í·É¾îÀÇ À§Ä¡¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ¸í·É¾î°¡ ½ÇÇàµÉ ¶§¸¶´Ù ´ÙÀ½ ¸í·É¾î¸¦ °¡¸®Å°µµ·Ï ¼öÁ¤µË´Ï´Ù. Áö±Ý±îÁö ³íÇØ¿Ô´ø µ¥ÀÌÅÍ Á¢±ÙÀ» À§ÇØ »ç¿ëµÇ°í ¸í·É¾î·ÎºÎÅÍ Á¶À۵Ǵ °Ô °¡´ÉÇÑ ¸ðµç ·¹Áö½ºÅ͵é°ú ´Þ¸®, EIP´Â ¸í·É¾î·ÎºÎÅÍ Á÷Á¢ Á¶ÀÛµÉ ¼ö ¾ø½À´Ï´Ù. µ¥ÀÌÅÍ À¯Çü ±âº» µ¥ÀÌÅÍ Çü½ÄÀÔ´Ï´Ù; 8 ºñÆ®ÀÇ ¹ÙÀÌÆ®, 2 ¹ÙÀÌÆ®(16 ºñÆ®)ÀÇ ¿öµå, 4 ¹ÙÀÌÆ®(32 ºñÆ®)ÀÇ ´õºí ¿öµå. ¸ñÀû ¼öÇàÀ» À§ÇØ µ¥ÀÌÅÍ ±¸Á¶(Ưº°È÷ ½ºÅÃ)´Â ¿öµå¿Í ´õºí ¿öµå°¡ Á¤·ÄµÇ¾î¾ß ÇÕ´Ï´Ù. 8¹ÙÀÌÆ® °æ°è¿¡ °ÉÃÄ ÀÖ´Â word ¶Ç´Â double word´Â µÎ °³ÀÇ ¼­·Î ´Ù¸¥ ¸Þ¸ð¸® ¹ö½º »çÀÌŬ¿¡ Á¢±ÙµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÛ¼ºÇÑ ÀͽºÇ÷ÎÀÕ Äڵ带 ¿ø°Ý ½Ã½ºÅÛÀ¸·Î Àü¼ÛÇÒ ¶§ ÀͽºÇ÷ÎÀÕ ÄÚµåÀÇ Á¤»ó ÀÛµ¿/½ÇÇàÀ» À§ÇÏ¿© ¸í·É¾îµéÀ» Á¤·ÄÇØ¾ß ÇÕ´Ï´Ù. ÀÛ¾÷ ·¹Áö½ºÅÍ¿Í µ¥ÀÌÅÍ À¯ÇüÀÇ ¸î °¡Áö ±âº»Àû ÀÌÇظ¦ ÇßÀ¸´Ï, ÈçÈ÷ º¸ÀÌ´Â ¸î °¡Áö ¸í·É¾î¸¦ º¸°Ú½À´Ï´Ù. ¾Æ·¡´Â ¸î °¡Áö ÀϹÝÀûÀÎ ¸í·É¾î¿Í °¢ ¸í·É¾îÀÇ ¼öÇà¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀÔ´Ï´Ù. ÀÌ ¸í·É¾î´Â ÀϹÝÀûÀ¸·Î µðÄÄÆÄÀÏ µÈ Äڵ忡¼­ º¸ÀÌ´Â ¸í·É¾îÀÔ´Ï´Ù. ¹°·Ð ´ÜÁö ¸Å¿ì ÀÛÀº ¸í·É¾î ¸ñ·ÏÀÔ´Ï´Ù, ¸ðµç ¸í·É¾î°¡ »ó¼¼ÇÑ ÀÎÅÚ¿¡¼­ Á¦°øÇÏ´Â ÂüÁ¶ °¡À̵带 Æ÷ÇÔÇÏ¿© ¸¹Àº ¿ì¼öÇÑ ±âÁØÁ¡ÀÌ ÀÖ½À´Ï´Ù. (http://developer.intel.com/design/processor/ ¿¡¼­ ´Ù¿î·Îµå °¡´ÉÇÕ´Ï´Ù.) ¾î¼Àºí¸® ¸í·É¾î / ¼³¸í CALL EAX / EAX °¡Áø ÁÖ¼Ò¸¦ È£ÃâÇÕ´Ï´Ù. CALL 0x77e7f13a / kernel32.dll ¿¡¼­ WriteFile È£ÃâÇÕ´Ï´Ù. MOV EAX, 0FFH / EAX¿¡ 255¸¦ ·Îµå ÇÕ´Ï´Ù. CLR EAX / EAX ·¹Áö½ºÅÍ ºñ¿ó´Ï´Ù. INC ECX / ECX = ECX+1 ¶Ç´Â Ä«¿îÅ͸¦ Áõ°¡ÇÕ´Ï´Ù. DEC ECX / ECX = ECX-1 ¶Ç´Â Ä«¿îÅ͸¦ °¨¼ÒÇÕ´Ï´Ù. ADD EAX, 2 / EAX¿¡ 2¸¦ ´õÇÕ´Ï´Ù. SUB EBX, 2 / EBX¿¡¼­ 2 ¹ÙÀÌÆ®¸¦ »®´Ï´Ù. RET 4 / ½ºÅÃÀÇ ÇöÀç °ªÀ» EIP¿¡ ³Ö½À´Ï´Ù. INT 3 / ÀÎÅÍ·´Æ® 3Àº ÀϹÝÀûÀ¸·Î ºê·¹ÀÌÅ© Æ÷ÀÎÆ®ÀÔ´Ï´Ù; INT ¸í·É¾î´Â ÇÁ·Î±×·¥¿¡¼­ ¸í½ÃÀûÀ¸·Î ¾ð±ÞÇÑ ÁöÁ¤µÈ ÀÎÅÍ·´Æ®¸¦ Çã¿ëÇÕ´Ï´Ù. JMP 80483f8 / JMP´Â ´Ü¼øÈ÷ EIP¸¦ ¸í·É¾î¿¡ µû¸¥ ÁÖ¼Ò·Î ¼¼ÆÃÇÕ´Ï´Ù. ½ºÅÿ¡ ÀúÀåµÇ´Â °ÍÀº ¾ø½À´Ï´Ù. ´ëºÎºÐÀÇ if-then-else´Â ÃÖ¼Ò ÇϳªÀÇ JMP ¸í·É¾î°¡ ÇÊ¿äÇÕ´Ï´Ù. JNZ / 0ÀÌ ¾Æ´Ï¸é Á¡ÇÁÇÕ´Ï´Ù. XOR EAX, EAX / EAX ·¹Áö½ºÅÍ´Â XOR¸¦ ¼öÇàÇÔÀ¸·Î½á setµÈ °ªÀ» 0À¸·Î clearÇÕ´Ï´Ù. LEA EAX / ½ÇÁ¦ ÁÖ¼Ò¸¦ ºÒ·¯¿Í EAX¿¡ ÀúÀåÇÕ´Ï´Ù. PUSH EAX / EAX¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ªÀ» ½ºÅÿ¡ Ǫ½ÃÇÕ´Ï´Ù. POP EAX / EAX¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ªÀ» ²¨³»¿É´Ï´Ù. Hello World ½ºÅà ·¹À̾ƿô°ú ¾î¼Àºí¸® ¸í·É¾îÀÇ ´õ ³ªÀº ÀÌÇظ¦ À§ÇÏ¿© Ç¥ÁØ ¿¹Á¦ hello world¸¦ º¸°í ´õ ÀÚ¼¼È÷ Á¶»çÇغ¾´Ï´Ù. ¾Æ·¡ ÄÚµå´Â ´Ü¼øÇÑ hello world ÇÁ·Î±×·¥ÀÇ ÄÚµåÀÔ´Ï´Ù. À¥»çÀÌÆ®·ÎºÎÅÍ ÀÌ ÇÁ·Î±×·¥ÀÇ ¸ñ·ÏÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡´Â main ÇÔ¼öÀÇ ¸ñ·ÏÀÇ ÀϺθ¦ º¸¿©ÁÝ´Ï´Ù. ¿©±â¿¡ Ç¥½ÃµÈ À§Ä¡´Â ¸ðµâÀÇ ½ÃÀÛ¿¡ °ü·ÃµË´Ï´Ù. ¾Æ·¡¿¡ ÀÖ´Â ¸ñ·ÏÀº ¾ÆÁ÷ ¿¬°áµÇÁö ¾Ê¾Ò½À´Ï´Ù. 1 1://helloworld.cpp : Defines the entry point for the console 2 2://application. This example has been compiled on Visual Studio 3 3://.NET so the ¡°"/GS¡±" flag results can be seen on line 37. 4 4: #include "stdafx.h" 5 5: 6 6: int main(int argc, char* argv[]) 7 7: { 8 //Prologue Begins 9 00401010 push ebp //Save EBP on the stack 10 00401011 mov ebp,esp //Save Current Value of ESP in EBP 11 00401013 sub esp,40h //Make space for 64 bytes (40h) var 12 00401016 push ebx //store the value of registers 13 00401017 push esi //on to the 14 00401018 push edi //stack 15 00401019 lea edi,[ebp-40h] //load ebp-64 bytes into edi 16 //the location where esp was before it started storing the values of //ebx etc on the stack. 17 18 0040101C mov ecx,10h //store 10h into ecx register 19 00401021 mov eax,0CCCCCCCCh 20 00401026 rep stos dword ptr [edi] 21 //Prologue Ends 22 //Body Begins 23 8: printf("Hello World!\n"); 24 00401028 push offset string "Hello World!\n" (0042001c) 25 0040102D call printf (00401060) 26 00401032 add esp,4 27 9: return 0; 28 00401035 xor eax,eax 29 10: } 30 //End Body 31 //Epilogue Begins 32 00401037 pop edi // restore the value of 33 00401038 pop esi //all the registers 34 00401039 pop ebx 35 0040103A add esp,40h //Add up the 64 bytes to esp 36 0040103D cmp ebp,esp 37 0040103F call __chkesp (004010e0) // ¡°/GS FLAG¡± 38 00401044 mov esp,ebp 39 00401046 pop ebp //restore the old EBP 40 00401047 ret 3 //restore and run to saved EIP 9 ~ 21 ¹ø° ÁÙÀº ÇÁ·Ñ·Î±× ºÎºÐÀÌ°í 31 ~ 40¹ø° ÁÙÀº ¿¡Çʷα×ÀÔ´Ï´Ù. ÇÁ·Ñ·Î±×¿Í ¿¡ÇÊ·Î±× ÄÚµå´Â ½ºÅà ÇÁ·¹ÀÓÀ» ¼³Á¤ÇÏ°í, ·¹Áö½ºÅ͸¦ º¸Á¸ÇÏ°í ÇÔ¼ö È£ÃâÀÌ ¿Ï·áµÈ ÈÄ ½ºÅà ÇÁ·¹ÀÓ(½ºÅÿ¡ ³Ö¾îÁö´Â ÇϳªÀÇ ÇÔ¼ö¿¡ °ü·ÃµÈ ¸ðµç Á¤º¸¸¦ ½ºÅà ÇÁ·¹ÀÓÀ̶ó ºÎ¸¥´Ù)À» À¯ÁöÇϱâ À§ÇÏ¿© ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ÀÚµ¿À¸·Î »ý¼ºµË´Ï´Ù. ¹Ùµð¿¡´Â ½ÇÁ¦ ÇÔ¼ö È£Ãâ Äڵ尡 Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ÇÁ·Ñ·Î±×¿Í ¿¡Çʷα״ ¾ÆÅ°ÅØó¿Í ÄÄÆÄÀÏ·¯·Î ±¸ºÐÇÕ´Ï´Ù. À§ÀÇ ¿¹Á¦(9 ~ 21 ÁÙ)´Â Visual Studio 6.0 ¾Æ·¡¼­ º» ÀüÇüÀûÀÎ ÇÁ·Ñ·Î±×¸¦ º¸¿©ÁÝ´Ï´Ù. ù ¹ø° ¸í·É¾î´Â ÀÌÀü EBP(ºÎ¸ð º£À̽º Æ÷ÀÎÅÍ/ÇÁ·¹ÀÓ Æ÷ÀÎÅÍ) ÁÖ¼Ò¸¦ ½ºÅÃ(½ºÅà ÇÁ·¹ÀÓÀ» ³»ºÎ¿¡ »õ·Î »ý¼ºÇÕ´Ï´Ù)¿¡ ÀúÀåÇÕ´Ï´Ù. ´ÙÀ½ ¸í·É¾î´Â ESP ·¹Áö½ºÅÍÀÇ °ªÀ» EBP ·¹Áö½ºÅÍ·Î º¹»çÇÕ´Ï´Ù, µû¶ó¼­ »õ·Î¿î º£À̽º Æ÷ÀÎÅÍ(EBP)¸¦ °¡¸®Å°µµ·Ï »õ·Î¿î º£À̽º Æ÷ÀÎÅ͸¦ ¼³Á¤ÇÕ´Ï´Ù. ¼¼ ¹ø° ¸í·É¾î´Â Áö¿ª º¯¼ö¸¦ À§ÇØ ½ºÅÿ¡ °ø°£À» ¿¹¾àÇÕ´Ï´Ù, ÀÌ ¿¹Á¦¿¡¼­´Â ÃÑ 64 ¹ÙÀÌÆ®ÀÇ °ø°£ÀÌ »ý¼ºµË´Ï´Ù. ÀϹÝÀûÀ¸·Î Àμö´Â ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊÀ¸·Î Àü´ÞµÇ°í È£ÃâµÈ ÇÔ¼ö°¡ ½ºÅÃÀ» Ã¥ÀÓÁö°í Á¤¸®ÇÏ´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. À§ÀÇ ¿¡ÇÊ·Î±× ÄÚµå´Â ½ºÅà ÇÁ·¹ÀÓÀÌ Á¤¸®µÇ±â Àü¿¡ ·¹Áö½ºÅÍÀÇ »óŸ¦ º¹¿øÇÕ´Ï´Ù. ÇÁ·Ñ·Î±×¿¡¼­ ½ºÅà ÇÁ·¹ÀÓ¿¡ Ǫ½ÃµÈ ¸ðµç ·¹Áö½ºÅÍÀÇ ³»¿ëÀº ¿ø·¡ º¸À¯ÇÑ °ªÀ¸·Î °ð ²¨³»Áö°í º¹¿øµË´Ï´Ù(31 ~ 33 ÁÙ), ´ÙÀ½ ¼¼ ÁÙÀº ¿ÀÁ÷ µð¹ö±× ¹öÀüÀ» ³ªÅ¸³À´Ï´Ù(34 ~ 36 ÁÙ), 64 ¹ÙÀÌÆ®°¡ Ãß°¡µÈ ½ºÅà Æ÷ÀÎÅÍ°¡ º£À̽º Æ÷ÀÎÅ͸¦ °¡¸®Å°´ÂÁö ´ÙÀ½ ¶óÀο¡¼­ üũµË´Ï´Ù. 37 ÁÙ¿¡ ÀÖ´Â ¸í·É¾î´Â ¿ø·¡ ÇÔ¼ö·Î µ¹¾Æ¿À±â Àü¿¡ ´Ù½Ã ½ºÅÿ¡¼­ ¸®ÅÏ ÁÖ¼Ò°¡ ²¨³»Áö´Â °ÍÀ» È®ÀÎÇÕ´Ï´Ù.[MSDN¿¡¼­ "/GS Ç÷¡±× ½ÇÇà"ÀÇ ÀÚ¼¼ÇÑ ¼³¸íÀ» ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù] ¸®ÅÏ ÁÖ¼Ò°¡ È®ÀεǸé, ESP·Î À̵¿µÇ°í EBPÀÇ ³»¿ëÀÌ ²¨³»¾îÁö°í ¸¶Áö¸·À¸·Î ¸®ÅÏ ¸í·É¾î¿¡ ÀÇÇؼ­ ½ÇÇàµË´Ï´Ù. ¸®ÅÏ ¸í·É¾î´Â EIP ·¹Áö½ºÅÍ¿¡ ÇöÀçÀÇ ¸®ÅÏ ÁÖ¼Ò°¡ ÀÖ´Â ½ºÅÃÀÇ ¸Ç À§ °ªÀ» ²¨³À´Ï´Ù. Note : È£Ãâ ±Ô¾à "Äݸµ ÄÁº¥¼Ç" Ç¥ÁØÀº Visual Studio ¾Æ·¡¿¡¼­ CDECL ÀÔ´Ï´Ù. ¸¸¾à ÀÌ Ç¥ÁØÀÌ »ç¿ëµÇÁö ¾Ê´Â´Ù¸é, ½ºÅà ·¹À̾ƿôÀº ¾ÆÁÖ Àû°Ô º¯ÇÕ´Ï´Ù. fastcall ¶Ç´Â stdcall °°Àº ´Ù¸¥ È£Ã⠱Ծ࿡ ´ëÇØ ³íÀÇÇÏÁö ¾Ê½À´Ï´Ù.