1.2. Context Change and Stack Handling

ÇÁ·Î¼¼¼­´Â ÀÎÅÍ·´Æ®°¡ °É·Á¿À¸é, ±×¶§ ¼öÇàÇÏ´ø ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» Àá½Ã Áß´ÜÇÏ°í ÀÎÅÍ·´Æ® Çڵ鷯¸¦ ¼öÇàÇÑ ÈÄ ´Ù½Ã ÀÎÅÍ·´Æ®°¡ °É¸®±â Àü¿¡ ¼öÇàÇÏ´ø ÇÁ·Î±×·¥ÀÇ ½ÇÇà È帧À¸·Î µ¹¾Æ¿Í¾ß ÇÑ´Ù. ±×·¸°Ô Çϱâ À§Çؼ­ ÀÎÅÍ·´Æ® Çڵ鷯ÀÇ ÄÚµå·Î Á¡ÇÁÇϱâ Àü¿¡ ÇÁ·Î¼¼¼­´Â Çϵå¿þ¾îÀûÀ¸·Î ÇÁ·Î±×·¥ÀÇ context ¸¦ ÀúÀåÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù. ¸¶Ä¡ 'call' ¾î¼Àºí¸® ÀνºÆ®·°¼ÇÀ» ¼öÇàÇÏ´Â °Í°ú ºñ½ÁÇÑ µ¿ÀÛÀ» ÇÏ°Ô µÈ´Ù.

ÀÎÅÍ·´Æ®°¡ °É·Á¿À¸é, ÇÁ·Î¼¼¼­´Â EFLAGS, CS, EIP ·¹Áö½ºÅ͸¦ ½ºÅÿ¡ ÀúÀåÇÑ´Ù. ±× Áß, CS ¿Í EIP ·¹Áö½ºÅÍÀÇ °ªµéÀº ÀÎÅÍ·´Æ® Çڵ鸵ÀÌ ¿Ï·áµÈ ÈÄ¿¡ ´Ù½Ã ¸®ÅÏÇؼ­ µ¹¾Æ¿Ã °÷ÀÇ instruction pointer ÀÇ ¿ªÇÒÀ» ÇÏ°Ô µÈ´Ù.

¸¸¾à, ÀÎÅÍ·´Æ® º¤ÅÍ°¡ °¡¸®Å°´Â IDT ÀÇ ¿£Æ®¸®°¡ ÇöÀç ¼öÇàµÇ´Â ÇÁ·Î±×·¥º¸´Ù ´õ ³·Àº dpl(descriptor privilege level) [1] À» °¡Áö¸é, Áï, º¸´Ù ³ôÀº ±ÇÇÑÀ» °¡Áö´Â °æ¿ì¿¡´Â ½ºÅà ½ºÀ§ÄªÀÌ ÀϾ´Ù. ½ºÅà ½ºÀ§Ä¡°¡ ÀϾ°Ô µÇ¸é, Çڵ鷯°¡ ¼öÇàÀ» ¿Ï·áÇÏ°í, ¸®ÅÏÇØ¾ß ÇÒ Äڵ尡 »ç¿ëÇÏ´ø ½ºÅÃÀÇ ÁÖ¼Ò¿¡ ´ëÇÑ Á¤º¸ ¶ÇÇÑ ½ºÅÿ¡ ÀúÀåµÇ°Ô µÈ´Ù. ÀÌ °æ¿ì¿¡´Â ¸ÕÀú ½ºÅà üÀÎÁö°¡ ÀϾ°í, SS, ESP °¡ üÀÎÁöµÈ ½ºÅÃ, Áï, Çڵ鷯ÀÇ ½ºÅÿ¡ ÀúÀåµÇ°í, ±× ÈÄ EFLAGS, CS, EIP °¡ Çڵ鷯ÀÇ ½ºÅÿ¡ ÀúÀåµÇ°Ô µÈ´Ù. ´ÙÀ½ ±×¸²À» º¸¸é ½ºÅÃÀÇ »ç¿ëÀ» ¸íÈ®ÇÏ°Ô ¾Ë ¼ö ÀÖ´Ù :

그림 1-4. Stack usage with NO Privilege level change

À§ÀÇ ±×¸²Àº DPL ÀÇ º¯°æÀÌ ¾ø´Â °æ¿ìÀÇ ÀÎÅÍ·´Æ® Çڵ鷯 °ÔÀÌÆ® È£Ãâ½Ã ½ºÅÃÀÇ ¸ð¾çÀ̸ç, ¾Æ·¡ÀÇ ±×¸²Àº DPL ÀÇ º¯°æÀ¸·Î ÀÎÇÑ Stack change °¡ ÀÖÀ» °æ¿ìÀÇ ÀÎÅÍ·´Æ® Çڵ鷯 °ÔÀÌÆ® È£Ãâ½ÃÀÇ ½ºÅÃÀÇ ¸ð¾çÀÌ´Ù.

그림 1-5. Stack usage with Privilege level change

주석

[1]

DPL, Descriptor Privilege Level, µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ±â¼úµÇ¾îÁö´Â ¼¼±×¸ÕÆ® ȤÀº gate ÀÇ privilege level. ¼¼±×¸ÕÆ® µð½ºÅ©¸³ÅÍ È¤Àº gate µð½ºÅ©¸³ÅÍÀÇ DPL Çʵ忡 ±â·ÏµÈ´Ù. 0 ¿¡¼­ 3 ±îÁöÀÇ °ªÀ» °¡Áú ¼ö ÀÖÀ½. ¸®´ª½º´Â 0 °ú 3 µÎ°³ÀÇ °ª¸¸ »ç¿ëÇÔ. DPL Àº µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇؼ­ ±â¼úµÇ¾îÁö´Â ¼¼±×¸ÕÆ®·ÎÀÇ Á¢±Ù(access)À» ÄÁÆ®·Ñ ÇÑ´Ù. Áï, ÇØ´ç ¼¼±×¸ÕÆ®¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ±ÇÇÑ ·¹º§(privilege level) À» Á¤ÀÇÇÑ´Ù. ¿¹¸¦ µé¾î, 2 ÀÇ DPL À» °¡Áö´Â µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ±â¼úµÇ¾îÁö´Â ¼¼±×¸ÕÆ®¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â ÇÁ·Î¼¼¼­°¡ 0, 1, ȤÀº 2 ÀÇ privilege level ¿¡¼­ µ¿ÀÛÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù. ½ÇÀº, DPL ÀÌ ¾î¶² Á¾·ùÀÇ µð½ºÅ©¸³ÅÍ¿¡ Àִ°¡¿¡ µû¶ó¼­ DPL °ªÀº ´Ù¸£°Ô Çؼ®µÇÁö¸¸, ÀÚ¼¼ÇÑ °ÍÀº ÀÎÅÚÀÇ ¸Å´º¾óÀ» ÂüÁ¶Çϵµ·Ï ÇÑ´Ù : Intel Architecture Software developer's Manual Vol.3, pp.4-8 to 4-9