16-1.È£Ãâ ±Ô¾à

16-1-°¡.½ºÅÃ

ÀÌ Àý¿¡¼­´Â È£Ãâ ±Ô¾à(Calling Convention)¿¡ ´ëÇØ ¾Ë¾Æ º»´Ù. È£Ãâ ±Ô¾àÀ̶õ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ½Ä¿¡ ´ëÇÑ ÀÏÁ¾ÀÇ ¾à¼ÓÀε¥ Àμö´Â ¾î¶»°Ô Àü´ÞÇÏ¸ç ¸®ÅÏ°ªÀº ¾î¶»°Ô ¹ÝȯÇÏ°í Àμö Àü´ÞÀ» À§ÇØ »ç¿ëÇÑ ¸Þ¸ð¸®´Â ´©°¡ Á¤¸®ÇÒ °ÍÀÎÁö µîÀ» ±ÔÁ¤ÇÑ´Ù. ´ç¿¬È÷ È£ÃâÇÏ´Â ÂÊ°ú È£ÃâµÇ´Â ÂÊÀÇ ¾à¼ÓÀÌ ¸Â¾Æ¾ß ÇÏ¸ç ¾î´À ÇÑÂÊÀÌ ¾à¼ÓÀ» ¾î±æ °æ¿ì ÇÔ¼öµµ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» »Ó´õ·¯ ¸Þ¸ð¸®°¡ ¾û¸ÁÀÌ µÇ±â ¶§¹®¿¡ ÇÁ·Î±×·¥Àº Á¤»óÀûÀÎ ½ÇÇàÀ» °è¼ÓÇÒ ¼ö ¾ø´Ù.

È£Ãâ ±Ô¾àÀº ÄÄÆÄÀÏ·¯ ³»ºÎ¿¡¼­ ÀϾ´Â ÀÏÀ̱⠶§¹®¿¡ ÀÌÇØÇϱ⠽±Áö ¾Ê´Ù. »ç½Ç ÇÔ¼ö¸¦ ¸¸µé°í È£ÃâÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ÀÖ°í ³»ºÎ µ¿ÀÛ¿¡ °ü½ÉÀÌ ¾ø´Ù¸é ±»ÀÌ È£Ãâ ±Ô¾àÀ» ¾Ë¾Æ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ±×·¯³ª ÄÄÆÄÀÏ·¯ÀÇ ³»ºÎ µ¿ÀÛ°ú ÇÔ¼öÀÇ È£Ãâ °úÁ¤À» ¾Ë°Ô µÇ¸é Àç±Í È£ÃâÀ̳ª °¡º¯ Àμö µîÀÇ °í±Þ ±â¹ýµéÀ» ÀÌÇØÇÔÀ¸·Î½á ¹®¹ý¿¡ ´ëÇØ ÀڽۨÀÌ »ý±â¸ç Á» ´õ ÀÚÀ¯·Ó°Ô Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ Àú¼öÁØ µð¹ö±ë¿¡µµ È°¿ëÇÒ ¼ö ÀÖÀ¸¸ç C/C++ÀÌ ¾Æ´Ñ ´Ù¸¥ ¾ð¾î·Î ¸¸µç ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ¹ýµµ ¾Ë°Ô µÈ´Ù.

È£Ãâ ±Ô¾àÀ» ÀÌÇØÇϱâ À§Çؼ­´Â ½ºÅÿ¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÏ¸ç ½ºÅÃÀº ±â°è¾î ¼öÁØ¿¡¼­ µ¿ÀÛÇϱ⠶§¹®¿¡ ¾î¼Àºí¸® ¾ð¾î¿¡ ´ëÇÑ °³³äµµ ÇÊ¿äÇÏ´Ù. ÀÌ Àý¿¡¼­´Â ½ºÅà ÇÁ·¹ÀÓÀ» ¼³¸íÇϱâ À§ÇØ ¾î¼Àºí¸® ÄÚµå ¸®½ºÆ®¸¦ º¸À̴µ¥ Àß ¸ð¸¥´Ù ÇÏ´õ¶óµµ ´çÀå ³»¿ëÀ» ÀÌÇØÇϴµ¥´Â Å« ÁöÀåÀÌ ¾ø´Ù. eax, ebp µîÀÇ ·¹Áö½ºÅÍ´Â CPU°¡ »ç¿ëÇÏ´Â º¯¼ö¶ó°í »ý°¢ÇÏ¸é µÇ°í ´ëÀÔÇÒ ¶§´Â mov ¸í·ÉÀ» »ç¿ëÇÑ´Ù´Â °Í Á¤µµ¸¸ ¾Ë¾Æµµ µÈ´Ù. ¹°·Ð ¾î¼Àºí¸® ¾ð¾î¸¦ ¾È´Ù¸é ´õÇÒ ³ªÀ§¾øÀÌ ÁÁ°ÚÁö¸¸ ¸»ÀÌ´Ù.

½ºÅÃ(Stack)Àº ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸® °ø°£ÀÌ´Ù. CPU°¡ ÀÓ½ÃÀûÀÎ Á¤º¸¸¦ ÀúÀåÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ ÀÌ ¿µ¿ªÀ» »ç¿ëÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ ½ÇÇàÁßÀÏ ¶§ÀÇ ¸Þ¸ð¸® ¸ð¾çÀº ¿î¿µÃ¼Á¦¿¡ µû¶ó Á¶±Ý¾¿ ´Þ¶óÁú ¼ö ÀÖÁö¸¸ ÀϹÝÀûÀ¸·Î ´ÙÀ½°ú °°´Ù. ¾Æ·¡ ±×¸²Àº °£´ÜÇÑ ¿î¿µÃ¼Á¦ÀÎ µµ½ºÀÇ ¸Þ¸ð¸® ±¸Á¶À̸ç À©µµ¿ìÁîÀÇ °æ¿ì´Â À̺¸´Ù Á» ´õ º¹ÀâÇÏÁö¸¸ °³³äÀûÀ¸·Î´Â °°´Ù°í ÇÒ ¼ö ÀÖ´Ù.

¾Õ ºÎºÐ¿¡ ÇÁ·Î±×·¥ÀÇ Äڵ尡 ÀÖ°í À̾ µ¥ÀÌÅÍ ¿µ¿ªÀÌ ÀÖÀ¸¸ç µ¥ÀÌÅÍ ¿µ¿ª ¾Æ·¡ÂÊ¿¡´Â ÀÚÀ¯ ¿µ¿ªÀÎ ÈüÀÌ ÀÖ´Ù. ÈüÀº ½ÇÇàÁß¿¡ µ¿ÀûÀ¸·Î ÇÒ´çµÇ´Â ¸Þ¸ð¸® ¿µ¿ªÀ̸ç ÇÒ´çÀÌ ¹ß»ýÇÏ¸é µÚÂÊÀ¸·Î À̵¿Çϸ鼭 ÀÚÀ¯ ¿µ¿ªÀ» »ç¿ëÇÑ´Ù. ½ºÅÃÀº ¸Þ¸ð¸®ÀÇ °¡Àå µÞºÎºÐ(³ôÀº ¹øÁö)¿¡ À§Ä¡Çϴµ¥ °ªÀ» ³ÖÀ¸¸é À§ÂÊÀ¸·Î À̵¿ÇÑ´Ù. Èü°ú ½ºÅà »çÀÌ¿¡´Â ÀÚÀ¯ ¿µ¿ªÀÌ ÀÖ¾î µÎ ¿µ¿ª »çÀÌÀÇ ¿ÏÃæ ¿ªÇÒÀ» ÇÑ´Ù. ¸¸¾à Èü°ú ½ºÅÃÀÌ ¸¸³ª°Ô µÇ¸é ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ »óÅ°¡ µÈ´Ù.

½ºÅÿ¡ °ªÀ» ÀúÀåÇÏ´Â µ¿ÀÛÀ» push(¹Î´Ù)¶ó°í Çϸç ÀúÀåµÈ °ªÀ» »©³»´Â µ¿ÀÛÀ» pop(´ç±ä´Ù)À̶ó°í ÇÑ´Ù. ½ºÅÃÀÇ ÇöÀç À§Ä¡´Â esp·¹Áö½ºÅÍ¿¡ ±â¾ïµÇ¸ç pushÇϸé esp°¡ °¨¼ÒÇϸ鼭 °ªÀÌ ½ºÅÃÀ¸·Î µé¾î°¡°í popÇϸé esp¿¡ ÀúÀåµÈ °ªÀ» »©³»°í esp°¡ Áõ°¡ÇÑ´Ù. push A´Â esp-=4, mov [esp],A¿Í °°À¸¸ç pop A´Â mov A,[esp], esp+=4¿Í °°´Ù. ¿©±â¼­ 4´Â 32ºñÆ® ½Ã½ºÅÛÀÇ ½ºÅà ÇÑÄ­ Å©±âÀε¥ ½Ã½ºÅÛ¿¡ µû¶ó 2³ª 8ÀÌ µÉ ¼öµµ ÀÖ´Ù.

½ºÅÿ¡ ÀúÀåµÈ °ªµéÀº LIFO(Last In First Out)ÀÇ ¿øÄ¢¿¡ µû¶ó °¡Àå ÃÖÈÄ¿¡ µé¾î°£ °ªÀÌ °¡Àå ¸ÕÀú ³ª¿Â´Ù. ¿¹¸¦ µé¾î A, B, C ¼øÀ¸·Î °ªÀ» pushÇß´Ù¸é popÇÒ ¶§´Â C, B, A ¼øÀ¸·Î ÀÐÇôÁø´Ù. ¸¶Ä¡ Åýà ±â»çµéÀÌ Àܵ· º¸°üÀ» À§ÇØ »ç¿ëÇÏ´Â µ¿Àü ÄÉÀ̽º¿Í À¯»çÇѵ¥ ¾Æ·¡ÂÊ¿¡ ¹Ð¾î ³ÖÀº µ¿ÀüÀ» »© ³»·Á¸é À§ÂÊÀÇ µ¿ÀüµéÀ» ¸ÕÀú »©¾ß ÇÑ´Ù.

CPUÀÇ ¹ü¿ë ·¹Áö½ºÅÍ´Â °³¼ö°¡ ¸¹Áö ¾Ê±â ¶§¹®¿¡ ÇÊ¿äÇÑ ·¹Áö½ºÅÍ°¡ ÀÌ¹Ì °ªÀ» °¡Áö°í ÀÖÀ» ¶§´Â ½ºÅÿ¡ ·¹Áö½ºÅÍ°ªÀ» Àá½Ã ´ëÇÇÇØ ³õ°í »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î eax, ecx¸¦ Àá½Ã ´Ù¸¥ ¿ëµµ·Î »ç¿ëÇÏ°í ½Í´Ù°í ÇÏÀÚ. À̶§ CPU´Â µÎ ·¹Áö½ºÅÍÀÇ °ªÀ» ½ºÅÿ¡ pushÇÏ¿© ÀúÀåÇØ ³õ°í ÀÌ ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ¸ç ´Ù »ç¿ëÇÏ°í ³­ ÈÄ popÇؼ­ º¹±¸ÇÑ´Ù.

 

push ecx                             // ecx ÀúÀå

push eax                             // eax ÀúÀå

eax, ecx ·¹Áö½ºÅÍ »ç¿ë

pop eax                                // eax º¹±¸

pop ecx                               // ecx º¹±¸

 

ÀúÀåµÈ °ªÀ» º¹±¸ÇÒ ¶§´Â Ǫ½ÃÇÑ ¹Ý´ë ¼ø¼­´ë·Î ÆËÇØ¾ß ÇÑ´Ù. esp´Â Ǫ½ÃµÉ ¶§ °¨¼ÒÇϸç ÆËÇÒ ¶§ ´Ù½Ã Áõ°¡ÇÏ¿© Ç×»ó ´ÙÀ½ ¾×¼¼½ºÇÒ À§Ä¡¸¦ °¡¸®Å²´Ù.

±×¸²¿¡¼­ º¸´Ù½ÃÇÇ µÎ ¹ø Ǫ½ÃÇÑ ÈÄ µÎ ¹ø ÆËÇÏ¸é ½ºÅÃÀº ¿ø·¡ »óÅ·Πµ¹¾Æ°¡´Â Ư¼ºÀÌ ÀÖ´Ù. ±×·¡¼­ Ǫ½Ã, ÆË È¸¼ö¸¸ Á¤È®ÇÏ°Ô ¸ÂÃß¸é ¾ó¸¶µçÁö ¸¹Àº °ªµéÀ» ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ³ÖÀº ¼ø¼­ÀÇ ¿ª¼øÀ¸·Î ²¨³»±â¸¸ ÇÏ¸é µÈ´Ù. ¶ÇÇÑ Çª½ÃÇÑ ´ë»ó°ú ÆËÇÏ´Â ´ë»óÀÌ ¹Ýµå½Ã ÀÏÄ¡ÇÏÁö ¾Ê¾Æµµ µÇ¹Ç·Î ½ºÅÃÀ» °æÀ¯ÇÏ¿© ·¹Áö½ºÅͳ¢¸® °ªÀ» ´ëÀÔÇÒ ¼öµµ ÀÖ°í ±³È¯ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù.

 

push ecx

pop eax

push ecx

push eax

pop ecx

pop eax

eax¿¡ ecx ´ëÀÔ

eax¿Í ecxÀÇ ±³È¯

 

½ºÅÿ¡ ´ëÇØ ´õ »ó¼¼ÇÑ ³»¿ëÀ» ¾Ë°í ½Í´Ù¸é ¾î¼Àºí·¯ °³·Ð¼­¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. C¾ð¾î´Â ½ºÅÃÀ» Á÷Á¢ Á¶ÀÛÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù.