³ÌÐòµÄÖ´Ðйý³Ì¿É¿´×÷Á¬ÐøµÄº¯Êýµ÷Óᣵ±Ò»¸öº¯ÊýÖ´ÐÐÍê±Ïʱ£¬³ÌÐòÒª»Øµ½µ÷ÓÃÖ¸ÁîµÄÏÂÒ»ÌõÖ¸Áî(½ô½ÓcallÖ¸Áî)´¦¼ÌÐøÖ´ÐС£º¯Êýµ÷Óùý³Ìͨ³£Ê¹ÓöÑջʵÏÖ£¬Ã¿¸öÓû§Ì¬½ø³Ì¶ÔÓ¦Ò»¸öµ÷ÓÃÕ»½á¹¹(call
stack)¡£±àÒëÆ÷ʹÓöÑÕ»´«µÝº¯Êý²ÎÊý¡¢±£´æ·µ»ØµØÖ·¡¢ÁÙʱ±£´æ¼Ä´æÆ÷ÔÓÐÖµ(¼´º¯Êýµ÷ÓõÄÉÏÏÂÎÄ)ÒÔ±¸»Ö¸´ÒÔ¼°´æ´¢±¾µØ¾Ö²¿±äÁ¿¡£
²»Í¬´¦ÀíÆ÷ºÍ±àÒëÆ÷µÄ¶ÑÕ»²¼¾Ö¡¢º¯Êýµ÷Ó÷½·¨¶¼¿ÉÄܲ»Í¬£¬µ«¶ÑÕ»µÄ»ù±¾¸ÅÄîÊÇÒ»ÑùµÄ¡£
1 ¼Ä´æÆ÷·ÖÅä
¼Ä´æÆ÷ÊÇ´¦ÀíÆ÷¼Ó¹¤Êý¾Ý»òÔËÐгÌÐòµÄÖØÒªÔØÌ壬ÓÃÓÚ´æ·Å³ÌÐòÖ´ÐÐÖÐÓõ½µÄÊý¾ÝºÍÖ¸Áî¡£Òò´Ëº¯Êýµ÷ÓÃÕ»µÄʵÏÖÓë´¦ÀíÆ÷¼Ä´æÆ÷×éÃÜÇÐÏà¹Ø¡£
Intel 32λÌåϵ½á¹¹(¼ò³ÆIA32)´¦ÀíÆ÷°üº¬8¸öËÄ×ֽڼĴæÆ÷£¬ÈçÏÂͼËùʾ£º

ͼ1 IA32´¦ÀíÆ÷¼Ä´æÆ÷
×î³õµÄ8086ÖмĴæÆ÷ÊÇ16λ£¬Ã¿¸ö¶¼ÓÐÌØÊâÓÃ;£¬¼Ä´æÆ÷Ãû³Ç·´Ó³Æä²»Í¬ÓÃ;¡£ÓÉÓÚIA32ƽ̨²ÉÓÃÆ½ÃæÑ°Ö·Ä£Ê½£¬¶ÔÌØÊâ¼Ä´æÆ÷µÄÐèÇó´ó´ó½µµÍ£¬µ«ÓÉÓÚÀúÊ·ÔÒò£¬ÕâЩ¼Ä´æÆ÷Ãû³Æ±»±£ÁôÏÂÀ´¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ÉÏͼËùʾµÄǰ6¸ö¼Ä´æÆ÷¾ù¿É×÷ΪͨÓüĴæÆ÷ʹÓá£Ä³Ð©Ö¸Áî¿ÉÄÜÒԹ̶¨µÄ¼Ä´æÆ÷×÷ΪԴ¼Ä´æÆ÷»òÄ¿µÄ¼Ä´æÆ÷£¬ÈçÒ»Ð©ÌØÊâµÄËãÊõ²Ù×÷Ö¸Áîimull/mull/cltd/idivl/divlÒªÇóÒ»¸ö²ÎÊý±ØÐëÔÚ%eaxÖУ¬ÆäÔËËã½á¹û´æ·ÅÔÚ%edx(higher
32-bit)ºÍ%eax (lower32-bit)ÖУ»ÓÖÈ纯Êý·µ»ØÖµÍ¨³£±£´æÔÚ%eaxÖУ¬µÈµÈ¡£Îª±ÜÃâ¼æÈÝÐÔÎÊÌ⣬ABI¹æ·¶¶ÔÕâ×éͨÓüĴæÆ÷µÄ¾ßÌå×÷ÓüÓÒÔ¶¨Òå(ÈçͼÖÐËùʾ)¡£
¶ÔÓڼĴæÆ÷%eax¡¢%ebx¡¢%ecxºÍ%edx£¬¸÷×Ô¿É×÷ΪÁ½¸ö¶ÀÁ¢µÄ16λ¼Ä´æÆ÷ʹÓ㬶øµÍ16λ¼Ä´æÆ÷»¹¿É¼ÌÐø·ÖΪÁ½¸ö¶ÀÁ¢µÄ8λ¼Ä´æÆ÷ʹÓᣱàÒëÆ÷»á¸ù¾Ý²Ù×÷Êý´óСѡÔñºÏÊʵļĴæÆ÷À´Éú³É»ã±à´úÂë¡£ÔÚ»ã±àÓïÑÔ²ãÃæ£¬Õâ×éͨÓüĴæÆ÷ÒÔ%e(AT&TÓï·¨)»òÖ±½ÓÒÔe(IntelÓï·¨)¿ªÍ·À´ÒýÓã¬ÀýÈçmov
$5, %eax»òmov eax, 5±íʾ½«Á¢¼´Êý5¸³Öµ¸ø¼Ä´æÆ÷%eax¡£
ÔÚx86´¦ÀíÆ÷ÖУ¬EIP(Instruction Pointer)ÊÇÖ¸Áî¼Ä´æÆ÷£¬Ö¸Ïò´¦ÀíÆ÷ÏÂÌõµÈ´ýÖ´ÐеÄÖ¸ÁîµØÖ·(´úÂë¶ÎÄ򵀮«ÒÆÁ¿)£¬Ã¿´ÎÖ´ÐÐÍêÏàÓ¦»ã±àÖ¸ÁîEIPÖµ¾Í»áÔö¼Ó¡£ESP(Stack
Pointer)ÊǶÑÕ»Ö¸Õë¼Ä´æÆ÷£¬´æ·ÅÖ´Ðк¯Êý¶ÔÓ¦Õ»Ö¡µÄÕ»¶¥µØÖ·(Ò²ÊÇϵͳջµÄ¶¥²¿)£¬ÇÒʼÖÕÖ¸ÏòÕ»¶¥£»EBP(Base
Pointer)ÊÇÕ»Ö¡»ùÖ·Ö¸Õë¼Ä´æÆ÷£¬´æ·ÅÖ´Ðк¯Êý¶ÔÓ¦Õ»Ö¡µÄÕ»µ×µØÖ·£¬ÓÃÓÚCÔËÐпâ·ÃÎÊÕ»Öеľֲ¿±äÁ¿ºÍ²ÎÊý¡£
×¢Ò⣬EIPÊǸöÌØÊâ¼Ä´æÆ÷£¬²»ÄÜÏñ·ÃÎÊͨÓüĴæÆ÷ÄÇÑù·ÃÎÊËü£¬¼´ÕÒ²»µ½¿ÉÓÃÀ´Ñ°Ö·EIP²¢¶ÔÆä½øÐжÁдµÄ²Ù×÷Âë(OpCode)¡£EIP¿É±»jmp¡¢callºÍretµÈÖ¸ÁîÒþº¬µØ¸Ä±ä(ÊÂʵÉÏËüÒ»Ö±¶¼Ôڸıä)¡£
²»Í¬¼Ü¹¹µÄCPU£¬¼Ä´æÆ÷Ãû³Æ±»Ìí¼Ó²»Í¬Ç°×ºÒÔָʾ¼Ä´æÆ÷µÄ´óС¡£ÀýÈçx86¼Ü¹¹ÓÃ×Öĸ¡°e(extended)¡±×÷Ãû³ÆÇ°×º£¬Ö¸Ê¾¼Ä´æÆ÷´óСΪ32λ£»x86_64¼Ü¹¹ÓÃ×Öĸ¡°r¡±×÷Ãû³ÆÇ°×º£¬Ö¸Ê¾¸÷¼Ä´æÆ÷´óСΪ64λ¡£
±àÒëÆ÷ÔÚ½«C³ÌÐò±àÒë³É»ã±à³ÌÐòʱ£¬Ó¦×ñÑABIËù¹æ¶¨µÄ¼Ä´æÆ÷¹¦Äܶ¨Ò塣ͬÑùµØ£¬±àд»ã±à³ÌÐòʱҲӦ×ñÑ£¬·ñÔòËù±àдµÄ»ã±à³ÌÐò¿ÉÄÜÎÞ·¨ÓëC³ÌÐòÐͬ¹¤×÷¡£
¡¾À©Õ¹ÔĶÁ¡¿Õ»Ö¡Ö¸Õë¼Ä´æÆ÷
ΪÁË·ÃÎʺ¯Êý¾Ö²¿±äÁ¿£¬±ØÐëÄܶ¨Î»Ã¿¸ö±äÁ¿¡£¾Ö²¿±äÁ¿Ïà¶ÔÓÚ¶ÑÕ»Ö¸ÕëESPµÄλÖÃÔÚ½øÈ뺯Êýʱ¾ÍÒÑÈ·¶¨£¬ÀíÂÛÉϱäÁ¿¿ÉÓÃESP¼ÓÆ«ÒÆÁ¿À´ÒýÓ㬵«ESP»áÔÚº¯ÊýÖ´ÐÐÆÚËæ±äÁ¿µÄѹջºÍ³öÕ»¶ø±ä¶¯¡£¾¡¹ÜijЩÇé¿öϱàÒëÆ÷Äܸú×ÙÕ»ÖеıäÁ¿²Ù×÷ÒÔÐÞÕýÆ«ÒÆÁ¿£¬µ«ÒªÒýÈë¿É¹ÛµÄ¹ÜÀí¿ªÏú¡£¶øÇÒÔÚÓÐЩ»úÆ÷ÉÏ(ÈçIntel´¦ÀíÆ÷)£¬ÓÃESP¼ÓÆ«ÒÆÁ¿À´·ÃÎÊÒ»¸ö±äÁ¿ÐèÒª¶àÌõÖ¸Áî²ÅÄÜʵÏÖ¡£
Òò´Ë£¬Ðí¶à±àÒëÆ÷ʹÓÃÖ¡Ö¸Õë¼Ä´æÆ÷FP(Frame Pointer)¼Ç¼ջ֡»ùµØÖ·¡£¾Ö²¿±äÁ¿ºÍº¯Êý²ÎÊý¶¼¿Éͨ¹ýÖ¡Ö¸ÕëÒýÓã¬ÒòΪËüÃǵ½FPµÄ¾àÀë²»»áÊܵ½Ñ¹Õ»ºÍ³öÕ»²Ù×÷µÄÓ°Ïì¡£ÓÐЩ×ÊÁϽ«Ö¡Ö¸Õë³Æ×÷¾Ö²¿»ùÖ¸Õë(LB-local
base pointer)¡£
ÔÚIntel CPUÖУ¬¼Ä´æÆ÷BP(EBP)ÓÃ×÷Ö¡Ö¸Õë¡£ÔÚMotorola
CPUÖУ¬³ýA7(¶ÑÕ»Ö¸ÕëSP)ÍâµÄÈκεØÖ·¼Ä´æÆ÷¶¼¿ÉÓÃ×÷FP¡£µ±¶ÑÕ»ÏòÏÂ(µÍµØÖ·)Ôö³¤Ê±£¬ÒÔFPµØÖ·Îª»ù×¼£¬º¯Êý²ÎÊýµÄÆ«ÒÆÁ¿ÊÇÕýÖµ£¬¶ø¾Ö²¿±äÁ¿µÄÆ«ÒÆÁ¿ÊǸºÖµ¡£
2 ¼Ä´æÆ÷ʹÓÃÔ¼¶¨
³ÌÐò¼Ä´æÆ÷×éÊÇΨһÄܱ»ËùÓк¯Êý¹²ÏíµÄ×ÊÔ´¡£ËäȻijһʱ¿ÌÖ»ÓÐÒ»¸öº¯ÊýÔÚÖ´ÐУ¬µ«Ðè±£Ö¤µ±Ä³¸öº¯Êýµ÷ÓÃÆäËûº¯Êýʱ£¬±»µ÷º¯Êý²»»áÐ޸Ļò¸²¸ÇÖ÷µ÷º¯ÊýÉÔºó»áʹÓõ½µÄ¼Ä´æÆ÷Öµ¡£Òò´Ë£¬IA32²ÉÓÃÒ»Ì×ͳһµÄ¼Ä´æÆ÷ʹÓÃÔ¼¶¨£¬ËùÓк¯Êý(°üÀ¨¿âº¯Êý)µ÷Óö¼±ØÐë×ñÊØ¸ÃÔ¼¶¨¡£
¸ù¾Ý¹ßÀý£¬¼Ä´æÆ÷%eax¡¢%edxºÍ%ecxΪÖ÷µ÷º¯Êý±£´æ¼Ä´æÆ÷(caller-saved registers)£¬µ±º¯Êýµ÷ÓÃʱ£¬ÈôÖ÷µ÷º¯ÊýÏ£Íû±£³ÖÕâЩ¼Ä´æÆ÷µÄÖµ£¬Ôò±ØÐëÔÚµ÷ÓÃǰÏÔʽµØ½«Æä±£´æÔÚÕ»ÖУ»±»µ÷º¯Êý¿ÉÒÔ¸²¸ÇÕâЩ¼Ä´æÆ÷£¬¶ø²»»áÆÆ»µÖ÷µ÷º¯ÊýËùÐèµÄÊý¾Ý¡£¼Ä´æÆ÷%ebx¡¢%esiºÍ%ediΪ±»µ÷º¯Êý±£´æ¼Ä´æÆ÷(callee-saved
registers)£¬¼´±»µ÷º¯ÊýÔÚ¸²¸ÇÕâЩ¼Ä´æÆ÷µÄֵʱ£¬±ØÐëÏȽ«¼Ä´æÆ÷ÔֵѹÈëÕ»Öб£´æÆðÀ´£¬²¢ÔÚº¯Êý·µ»ØÇ°´ÓÕ»Öлָ´ÆäÔÖµ£¬ÒòΪÖ÷µ÷º¯Êý¿ÉÄÜÒ²ÔÚʹÓÃÕâЩ¼Ä´æÆ÷¡£´ËÍ⣬±»µ÷º¯Êý±ØÐë±£³Ö¼Ä´æÆ÷%ebpºÍ%esp£¬²¢ÔÚº¯Êý·µ»Øºó½«Æä»Ö¸´µ½µ÷ÓÃǰµÄÖµ£¬Ò༴±ØÐë»Ö¸´Ö÷µ÷º¯ÊýµÄÕ»Ö¡¡£
µ±È»£¬ÕâЩ¹¤×÷¶¼ÓɱàÒëÆ÷ÔÚÄ»ºó½øÐС£²»¹ýÔÚ±àд»ã±à³ÌÐòʱӦעÒâ×ñÊØÉÏÊö¹ßÀý¡£
3 Õ»Ö¡½á¹¹
º¯Êýµ÷Óþ³£ÊÇǶÌ׵ģ¬ÔÚͬһʱ¿Ì£¬¶ÑÕ»ÖлáÓжà¸öº¯ÊýµÄÐÅÏ¢¡£Ã¿¸öδÍê³ÉÔËÐеĺ¯ÊýÕ¼ÓÃÒ»¸ö¶ÀÁ¢µÄÁ¬ÐøÇøÓò£¬³Æ×÷Õ»Ö¡(Stack
Frame)¡£Õ»Ö¡ÊǶÑÕ»µÄÂ߼Ƭ¶Î£¬µ±µ÷Óú¯ÊýʱÂß¼Õ»Ö¡±»Ñ¹Èë¶ÑÕ», µ±º¯Êý·µ»ØÊ±Âß¼Õ»Ö¡±»´Ó¶ÑÕ»Öе¯³ö¡£Õ»Ö¡´æ·Åן¯Êý²ÎÊý£¬¾Ö²¿±äÁ¿¼°»Ö¸´Ç°Ò»Õ»Ö¡ËùÐèÒªµÄÊý¾ÝµÈ¡£
±àÒëÆ÷ÀûÓÃÕ»Ö¡£¬Ê¹µÃº¯Êý²ÎÊýºÍº¯ÊýÖоֲ¿±äÁ¿µÄ·ÖÅäÓëÊͷŶԳÌÐòԱ͸Ã÷¡£±àÒëÆ÷½«¿ØÖÆÈ¨Òƽ»º¯Êý±¾Éí֮ǰ£¬²åÈëÌØ¶¨´úÂ뽫º¯Êý²ÎÊýѹÈëÕ»Ö¡ÖУ¬²¢·ÖÅä×ã¹»µÄÄÚ´æ¿Õ¼äÓÃÓÚ´æ·Åº¯ÊýÖеľֲ¿±äÁ¿¡£Ê¹ÓÃÕ»Ö¡µÄÒ»¸öºÃ´¦ÊÇʹµÃµÝ¹é±äΪ¿ÉÄÜ£¬ÒòΪ¶Ôº¯ÊýµÄÿ´ÎµÝ¹éµ÷Ó㬶¼»á·ÖÅ䏸¸Ãº¯ÊýÒ»¸öеÄÕ»Ö¡£¬ÕâÑù¾ÍÇÉÃîµØ¸ôÀ뵱ǰµ÷ÓÃÓëÉϴε÷Óá£
Õ»Ö¡µÄ±ß½çÓÉÕ»Ö¡»ùµØÖ·Ö¸ÕëEBPºÍ¶ÑÕ»Ö¸ÕëESP½ç¶¨(Ö¸Õë´æ·ÅÔÚÏàÓ¦¼Ä´æÆ÷ÖÐ)¡£EBPÖ¸Ïòµ±Ç°Õ»Ö¡µ×²¿(¸ßµØÖ·)£¬ÔÚµ±Ç°Õ»Ö¡ÄÚλÖù̶¨£»ESPÖ¸Ïòµ±Ç°Õ»Ö¡¶¥²¿(µÍµØÖ·)£¬µ±³ÌÐòÖ´ÐÐʱESP»áËæ×ÅÊý¾ÝµÄÈëÕ»ºÍ³öÕ»¶øÒƶ¯¡£Òò´Ëº¯ÊýÖжԴ󲿷ÖÊý¾ÝµÄ·ÃÎʶ¼»ùÓÚEBP½øÐС£
Ϊ¸ü¾ßÃèÊöÐÔ£¬ÒÔϳÆEBPΪ֡»ùÖ¸Õ룬 ESPΪջ¶¥Ö¸Õ룬²¢ÔÚÒýÓûã±à´úÂëʱ·Ö±ð¼ÇΪ%ebpºÍ%esp¡£
º¯Êýµ÷ÓÃÕ»µÄµäÐÍÄÚ´æ²¼¾ÖÈçÏÂͼËùʾ£º

ͼ2 º¯Êýµ÷ÓÃÕ»µÄµäÐÍÄÚ´æ²¼¾Ö
ͼÖиø³öÖ÷µ÷º¯Êý(caller)ºÍ±»µ÷º¯Êý(callee)µÄÕ»Ö¡²¼¾Ö£¬"m(%ebp)"±íʾÒÔEBPΪ»ùµØÖ·¡¢Æ«ÒÆÁ¿Îªm×Ö½ÚµÄÄÚ´æ¿Õ¼ä(ÖеÄÄÚÈÝ)¡£¸Ãͼ»ùÓÚÁ½¸ö¼ÙÉ裺µÚÒ»£¬º¯Êý·µ»ØÖµ²»ÊǽṹÌå»òÁªºÏÌ壬·ñÔòµÚÒ»¸ö²ÎÊý½«Î»ÓÚ"12(%ebp)"
´¦£»µÚ¶þ£¬Ã¿¸ö²ÎÊý¶¼ÊÇ4×Ö½Ú´óС(Õ»µÄÁ£¶ÈΪ4×Ö½Ú)¡£ÔÚ±¾ÎĺóÐøÕ½ڽ«¾Í²ÎÊýµÄ´«µÝºÍ´óСÎÊÌâ×ö½øÒ»²½µÄ̽ÌÖ¡£
´ËÍ⣬º¯Êý¿ÉÒÔûÓвÎÊýºÍ¾Ö²¿±äÁ¿£¬¹ÊͼÖС°Argument(²ÎÊý)¡±ºÍ¡°Local Variable(¾Ö²¿±äÁ¿)¡±²»ÊǺ¯ÊýÕ»Ö¡½á¹¹µÄ±ØÐ貿·Ö¡£
´ÓͼÖпÉÒÔ¿´³ö£¬º¯Êýµ÷ÓÃʱÈëջ˳ÐòΪ:
ʵ²ÎN~1¡úÖ÷µ÷º¯Êý·µ»ØµØÖ·¡úÖ÷µ÷º¯ÊýÖ¡»ùÖ¸ÕëEBP¡ú±»µ÷º¯Êý¾Ö²¿±äÁ¿1~N
ÆäÖУ¬Ö÷µ÷º¯Êý½«²ÎÊý°´ÕÕµ÷ÓÃÔ¼¶¨ÒÀ´ÎÈëÕ»(ͼÖÐΪ´ÓÓÒµ½×ó)£¬È»ºó½«Ö¸ÁîÖ¸ÕëEIPÈëÕ»ÒÔ±£´æÖ÷µ÷º¯ÊýµÄ·µ»ØµØÖ·(ÏÂÒ»Ìõ´ýÖ´ÐÐÖ¸ÁîµÄµØÖ·)¡£½øÈë±»µ÷º¯Êýʱ£¬±»µ÷º¯Êý½«Ö÷µ÷º¯ÊýµÄÖ¡»ùÖ¸ÕëEBPÈëÕ»£¬²¢½«Ö÷µ÷º¯ÊýµÄÕ»¶¥Ö¸ÕëESPÖµ¸³¸ø±»µ÷º¯ÊýµÄEBP(×÷Ϊ±»µ÷º¯ÊýµÄÕ»µ×)£¬½ÓןıäESPÖµÀ´Îªº¯Êý¾Ö²¿±äÁ¿Ô¤Áô¿Õ¼ä¡£´Ëʱ±»µ÷º¯ÊýÖ¡»ùÖ¸ÕëÖ¸Ïò±»µ÷º¯ÊýµÄÕ»µ×¡£ÒԸõØÖ·Îª»ù×¼£¬ÏòÉÏ(Õ»µ×·½Ïò)¿É»ñÈ¡Ö÷µ÷º¯ÊýµÄ·µ»ØµØÖ·¡¢²ÎÊýÖµ£¬ÏòÏÂ(Õ»¶¥·½Ïò)ÄÜ»ñÈ¡±»µ÷º¯ÊýµÄ¾Ö²¿±äÁ¿Öµ£¬¶ø¸ÃµØÖ·´¦ÓÖ´æ·Å×ÅÉÏÒ»²ãÖ÷µ÷º¯ÊýµÄÖ¡»ùÖ¸ÕëÖµ¡£±¾¼¶µ÷ÓýáÊøºó£¬½«EBPÖ¸ÕëÖµ¸³¸øESP£¬Ê¹ESPÔÙ´ÎÖ¸Ïò±»µ÷º¯ÊýÕ»µ×ÒÔÊͷžֲ¿±äÁ¿£»ÔÙ½«ÒÑѹջµÄÖ÷µ÷º¯ÊýÖ¡»ùÖ¸Õ뵯³öµ½EBP£¬²¢µ¯³ö·µ»ØµØÖ·µ½EIP¡£ESP¼ÌÐøÉÏÒÆÔ½¹ý²ÎÊý£¬×îÖջص½º¯Êýµ÷ÓÃǰµÄ״̬£¬¼´»Ö¸´ÔÀ´Ö÷µ÷º¯ÊýµÄÕ»Ö¡¡£Èç´ËµÝ¹é±ãÐγɺ¯Êýµ÷ÓÃÕ»¡£
EBPÖ¸ÕëÔÚµ±Ç°º¯ÊýÔËÐйý³ÌÖÐ(δµ÷ÓÃÆäËûº¯Êýʱ)±£³Ö²»±ä¡£ÔÚº¯Êýµ÷ÓÃǰ£¬ESPÖ¸ÕëÖ¸ÏòÕ»¶¥µØÖ·£¬Ò²ÊÇÕ»µ×µØÖ·¡£ÔÚº¯ÊýÍê³ÉÏÖ³¡±£»¤Ö®ÀàµÄ³õʼ»¯¹¤×÷ºó£¬ESP»áʼÖÕÖ¸Ïòµ±Ç°º¯ÊýÕ»Ö¡µÄÕ»¶¥£¬´Ëʱ£¬Èôµ±Ç°º¯ÊýÓÖµ÷ÓÃÁíÒ»¸öº¯Êý£¬Ôò»á½«´ËʱµÄEBPÊÓΪ¾ÉEBPѹջ£¬¶øÓëе÷Óú¯ÊýÓйصÄÄÚÈÝ»á´Óµ±Ç°ESPËùÖ¸ÏòλÖÿªÊ¼Ñ¹Õ»¡£
ÈôÐèÔÚº¯ÊýÖб£´æ±»µ÷º¯Êý±£´æ¼Ä´æÆ÷(ÈçESI¡¢EDI)£¬Ôò±àÒëÆ÷ÔÚ±£´æEBPֵʱ½øÐб£´æ£¬»òÑÓ³Ù±£´æÖ±µ½¾Ö²¿±äÁ¿¿Õ¼ä±»·ÖÅä¡£ÔÚÕ»Ö¡Öв¢Î´Îª±»µ÷º¯Êý±£´æ¼Ä´æÆ÷µÄ¿Õ¼äÖ¸¶¨±ê×¼µÄ´æ´¢Î»Öᣰüº¬¼Ä´æÆ÷ºÍÁÙʱ±äÁ¿µÄº¯Êýµ÷ÓÃÕ»²¼¾Ö¿ÉÄÜÈçÏÂͼËùʾ£º

ͼ3 º¯Êýµ÷ÓÃÕ»µÄ¿ÉÄÜÄÚ´æ²¼¾Ö
ÔÚ¶àÏß³Ì(ÈÎÎñ)»·¾³£¬Õ»¶¥Ö¸ÕëÖ¸ÏòµÄ´æ´¢Æ÷ÇøÓò¾ÍÊǵ±Ç°Ê¹ÓõĶÑÕ»¡£Çл»Ï̵߳ÄÒ»¸öÖØÒª¹¤×÷£¬¾ÍÊǽ«Õ»¶¥Ö¸ÕëÉèΪµ±Ç°Ï̵߳ĶÑÕ»Õ»¶¥µØÖ·¡£
ÒÔÏ´úÂëÓÃÓÚº¯ÊýÕ»²¼¾ÖʾÀý£º
//StackFrame.c
#include
#include
struct Strt{
int member1;
int member2;
int member3;
};
#define PRINT_ADDR(x) printf("&"#x" = %p\n", &x)
int StackFrameContent(int para1, int para2, int para3){
int locVar1 = 1;
int locVar2 = 2;
int locVar3 = 3;
int arr[] = {0x11,0x22,0x33};
struct Strt tStrt = {0};
PRINT_ADDR(para1); //Èôpara1Ϊchar»òshortÐÍ£¬Ôò´òÓ¡para1Ëù¶ÔÓ¦µÄÕ»ÉÏÕûÐÍÁÙʱ±äÁ¿µØÖ·£¡
PRINT_ADDR(para2);
PRINT_ADDR(para3);
PRINT_ADDR(locVar1);
PRINT_ADDR(locVar2);
PRINT_ADDR(locVar3);
PRINT_ADDR(arr);
PRINT_ADDR(arr[0]);
PRINT_ADDR(arr[1]);
PRINT_ADDR(arr[2]);
PRINT_ADDR(tStrt);
PRINT_ADDR(tStrt.member1);
PRINT_ADDR(tStrt.member2);
PRINT_ADDR(tStrt.member3);
return 0;
}
int main(void){
int locMain1 = 1, locMain2 = 2, locMain3 = 3;
PRINT_ADDR(locMain1);
PRINT_ADDR(locMain2);
PRINT_ADDR(locMain3);
StackFrameContent(locMain1, locMain2, locMain3);
printf("[locMain1,2,3] = [%d, %d, %d]\n", locMain1, locMain2, locMain3);
memset(&locMain2, 0, 2*sizeof(int));
printf("[locMain1,2,3] = [%d, %d, %d]\n", locMain1, locMain2, locMain3);
return 0;
}
StackFrame
|
±àÒëÁ´½Ó²¢Ö´Ðкó£¬Êä³ö´òÓ¡ÈçÏ£º

ͼ4 StackFrameÊä³ö
º¯ÊýÕ»²¼¾ÖʾÀýÈçÏÂͼËùʾ¡£ÎªÖ±¹ÛÆð¼û£¬µÍÓÚÆðʼ¸ßµØÖ·0xbfc75a58µÄÆäËûµØÖ·²ÉÓõã¼Ç·¨£¬Èç0x.54±íʾ0xbfc75a54£¬ÒÔ´ËÀàÍÆ¡£

ͼ5 StackFrameջ֡
ÄÚ´æµØÖ·´ÓÕ»µ×µ½Õ»¶¥µÝ¼õ£¬Ñ¹Õ»¾ÍÊǰÑESPÖ¸ÕëÖð½¥ÍùµØµÍÖ·ÒÆ¶¯µÄ¹ý³Ì¡£¶ø½á¹¹ÌåtStrtÖеijÉÔ±±äÁ¿memberXµØÖ·=tStrtÊ×µØÖ·+(memberXÆ«ÒÆÁ¿)£¬¼´Ô½¿¿½ütStrtÊ×µØÖ·µÄ³ÉÔ±±äÁ¿ÆäÄÚ´æµØÖ·Ô½Ð¡¡£Òò´Ë£¬½á¹¹Ìå³ÉÔ±±äÁ¿µÄÈëջ˳ÐòÓëÆäÔڽṹÌåÖÐÉùÃ÷µÄ˳ÐòÏà·´¡£
º¯Êýµ÷ÓÃÒÔÖµ´«µÝʱ£¬´«ÈëµÄʵ²Î(locMain1~3)Óë±»µ÷º¯ÊýÄÚ²Ù×÷µÄÐβÎ(para1~3)Á½Õß´æ´¢µØÖ·²»Í¬£¬Òò´Ë±»µ÷º¯ÊýÎÞ·¨Ö±½ÓÐÞ¸ÄÖ÷µ÷º¯Êýʵ²ÎÖµ(¶ÔÐβεIJÙ×÷Ï൱ÓÚÐÞ¸Äʵ²ÎµÄ¸±±¾)¡£Îª´ïµ½ÐÞ¸ÄÄ¿µÄ£¬ÐèÒªÏò±»µ÷º¯Êý´«µÝʵ²Î±äÁ¿µÄÖ¸Õë(¼´±äÁ¿µÄµØÖ·)¡£
´ËÍ⣬"[locMain1,2,3] = [0, 0, 3]"ÊÇÒòΪ¶ÔËÄ×Ö½Ú²ÎÊýlocMain2µ÷ÓÃmemsetº¯Êýʱ£¬»á´ÓµÍµØÖ·Ïò¸ßµØÖ·Á¬ÐøÇåÁã8¸ö×Ö½Ú£¬´Ó¶øÎó½«Î»ÓڸߵØÖ·locMain1ÇåÁã¡£
×¢Ò⣬¾Ö²¿±äÁ¿µÄ²¼¾ÖÒÀÀµÓÚ±àÒëÆ÷ʵÏÖµÈÒòËØ¡£Òò´Ë£¬µ±StackFrameContentº¯ÊýÖÐɾ³ý´òÓ¡Óï¾äʱ£¬±äÁ¿locVar3¡¢locVar2ºÍlocVar1¿ÉÄܰ´ÕմӸߵ½µÍµÄ˳ÐòÒÀ´Î´æ´¢£¡¶øÇÒ£¬¾Ö²¿±äÁ¿²¢²»×ÜÔÚÕ»ÖУ¬ÓÐʱ³öÓÚÐÔÄÜ(ËÙ¶È)¿¼ÂÇ»á´æ·ÅÔڼĴæÆ÷ÖС£Êý×é/½á¹¹ÌåÐ͵ľֲ¿±äÁ¿Í¨³£·ÖÅäÔÚÕ»ÄÚ´æÖС£
¡¾À©Õ¹ÔĶÁ¡¿º¯Êý¾Ö²¿±äÁ¿²¼¾Ö·½Ê½
Ó뺯Êýµ÷ÓÃÔ¼¶¨¹æ¶¨²ÎÊýÈçºÎ´«È벻ͬ£¬¾Ö²¿±äÁ¿ÒÔºÎÖÖ·½Ê½²¼¾Ö²¢Î´¹æ¶¨¡£±àÒëÆ÷¼ÆË㺯Êý¾Ö²¿±äÁ¿ËùÐèÒªµÄ¿Õ¼ä×ÜÊý£¬²¢È·¶¨ÕâЩ±äÁ¿´æ´¢ÔڼĴæÆ÷ÉÏ»¹ÊÇ·ÖÅäÔÚ³ÌÐòÕ»ÉÏ(ÉõÖÁ±»ÓÅ»¯µô)¡ª¡ªÄ³Ð©´¦ÀíÆ÷²¢Ã»ÓжÑÕ»¡£¾Ö²¿±äÁ¿µÄ¿Õ¼ä·ÖÅäÓëÖ÷µ÷º¯ÊýºÍ±»µ÷º¯ÊýÎ޹أ¬½ö½ö´Óº¯ÊýÔ´´úÂëÉÏÎÞ·¨È·¶¨¸Ãº¯ÊýµÄ¾Ö²¿±äÁ¿·Ö²¼Çé¿ö¡£
»ùÓÚ²»Í¬µÄ±àÒëÆ÷°æ±¾(gcc3.4Öоֲ¿±äÁ¿°´ÕÕ¶¨Òå˳ÐòÒÀ´ÎÈëÕ»£¬gcc4¼°ÒÔÉϰ汾Ôò²»¶¨)¡¢ÓÅ»¯¼¶±ð¡¢Ä¿±ê´¦ÀíÆ÷¼Ü¹¹¡¢Õ»°²È«ÐԵȣ¬ÏàÁÚ¶¨ÒåµÄÁ½¸ö±äÁ¿ÔÚÄÚ´æÎ»ÖÃÉÏ¿ÉÄÜÏàÁÚ£¬Ò²¿ÉÄܲ»ÏàÁÚ£¬Ç°ºó¹ØÏµÒ²²»¹Ì¶¨¡£ÈôҪȷ±£Á½¸ö¶ÔÏóÔÚÄÚ´æÉÏÏàÁÚÇÒǰºó¹ØÏµ¹Ì¶¨£¬¿ÉʹÓýṹÌå»òÊý×鶨Òå¡£
4 ¶ÑÕ»²Ù×÷
º¯Êýµ÷ÓÃʱµÄ¾ßÌå²½ÖèÈçÏ£º
1) Ö÷µ÷º¯Êý½«±»µ÷º¯ÊýËùÒªÇóµÄ²ÎÊý£¬¸ù¾ÝÏàÓ¦µÄº¯Êýµ÷ÓÃÔ¼¶¨£¬±£´æÔÚÔËÐÐʱջÖС£¸Ã²Ù×÷»á¸Ä±ä³ÌÐòµÄÕ»Ö¸Õë¡£
×¢£ºx86ƽ̨½«²ÎÊýѹÈëµ÷ÓÃÕ»ÖС£¶øx86_64ƽ̨¾ßÓÐ16¸öͨÓÃ64λ¼Ä´æÆ÷£¬¹Êµ÷Óú¯Êýʱǰ6¸ö²ÎÊýͨ³£ÓɼĴæÆ÷´«µÝ£¬ÆäÓà²ÎÊý²Åͨ¹ýÕ»´«µÝ¡£
2) Ö÷µ÷º¯Êý½«¿ØÖÆÈ¨Òƽ»¸ø±»µ÷º¯Êý(ʹÓÃcallÖ¸Áî)¡£º¯ÊýµÄ·µ»ØµØÖ·(´ýÖ´ÐеÄÏÂÌõÖ¸ÁîµØÖ·)±£´æÔÚ³ÌÐòÕ»ÖÐ(ѹջ²Ù×÷Òþº¬ÔÚcallÖ¸ÁîÖÐ)¡£
3) ÈôÓбØÒª£¬±»µ÷º¯Êý»áÉèÖÃÖ¡»ùÖ¸Õ룬²¢±£´æ±»µ÷º¯ÊýÏ£Íû±£³Ö²»±äµÄ¼Ä´æÆ÷Öµ¡£
4) ±»µ÷º¯Êýͨ¹ýÐÞ¸ÄÕ»¶¥Ö¸ÕëµÄÖµ£¬Îª×Ô¼ºµÄ¾Ö²¿±äÁ¿ÔÚÔËÐÐʱջÖзÖÅäÄÚ´æ¿Õ¼ä£¬²¢´ÓÖ¡»ùÖ¸ÕëµÄλÖô¦ÏòµÍµØÖ··½Ïò´æ·Å±»µ÷º¯ÊýµÄ¾Ö²¿±äÁ¿ºÍÁÙʱ±äÁ¿¡£
5) ±»µ÷º¯ÊýÖ´ÐÐ×Ô¼ºÈÎÎñ£¬´Ëʱ¿ÉÄÜÐèÒª·ÃÎÊÓÉÖ÷µ÷º¯Êý´«ÈëµÄ²ÎÊý¡£Èô±»µ÷º¯Êý·µ»ØÒ»¸öÖµ£¬¸Ãֵͨ³£±£´æÔÚÒ»¸öÖ¸¶¨¼Ä´æÆ÷ÖÐ(ÈçEAX)¡£
6) Ò»µ©±»µ÷º¯ÊýÍê³É²Ù×÷£¬Îª¸Ãº¯Êý¾Ö²¿±äÁ¿·ÖÅäµÄÕ»¿Õ¼ä½«±»ÊÍ·Å¡£Õâͨ³£ÊDz½Öè4µÄÄæÏòÖ´ÐС£
7) »Ö¸´²½Öè3Öб£´æµÄ¼Ä´æÆ÷Öµ£¬°üº¬Ö÷µ÷º¯ÊýµÄÖ¡»ùÖ¸Õë¼Ä´æÆ÷¡£
8) ±»µ÷º¯Êý½«¿ØÖÆÈ¨½»»¹Ö÷µ÷º¯Êý(ʹÓÃretÖ¸Áî)¡£¸ù¾ÝʹÓõĺ¯Êýµ÷ÓÃÔ¼¶¨£¬¸Ã²Ù×÷Ò²¿ÉÄÜ´Ó³ÌÐòÕ»ÉÏÇå³ýÏÈǰ´«ÈëµÄ²ÎÊý¡£
9) Ö÷µ÷º¯ÊýÔٴλñµÃ¿ØÖÆÈ¨ºó£¬¿ÉÄÜÐèÒª½«ÏÈǰµÄ²ÎÊý´ÓÕ»ÉÏÇå³ý¡£ÔÚÕâÖÖÇé¿öÏ£¬¶ÔÕ»µÄÐÞ¸ÄÐèÒª½«Ö¡»ùÖ¸ÕëÖµ»Ö¸´µ½²½Öè1֮ǰµÄÖµ¡£
²½Öè3Óë²½Öè4ÔÚº¯Êýµ÷ÓÃÖ®³õ³£Ò»Í¬³öÏÖ£¬Í³³ÆÎªº¯ÊýÐò(prologue)£»²½Öè6µ½²½Öè8ÔÚº¯Êýµ÷ÓõÄ×îºó³£Ò»Í¬³öÏÖ£¬Í³³ÆÎªº¯Êý°Ï(epilogue)¡£º¯ÊýÐòºÍº¯Êý°ÏÊDZàÒëÆ÷×Ô¶¯Ìí¼ÓµÄ¿ªÊ¼ºÍ½áÊø»ã±à´úÂ룬ÆäʵÏÖÓëCPU¼Ü¹¹ºÍ±àÒëÆ÷Ïà¹Ø¡£³ý²½Öè5´ú±íº¯ÊýʵÌåÍ⣬ÆäËüËùÓвÙ×÷×é³Éº¯Êýµ÷Óá£
ÒÔϽéÉܺ¯Êýµ÷Óùý³ÌÖеÄÖ÷ÒªÖ¸Áî¡£
ѹջ(push)£ºÕ»¶¥Ö¸ÕëESP¼õС4¸ö×Ö½Ú£»ÒÔ×Ö½ÚΪµ¥Î»½«¼Ä´æÆ÷Êý¾Ý(ËÄ×Ö½Ú£¬²»×ã²¹Áã)ѹÈë¶ÑÕ»£¬´Ó¸ßµ½µÍ°´×Ö½ÚÒÀ´Î½«Êý¾Ý´æÈëESP-1¡¢ESP-2¡¢ESP-3¡¢ESP-4Ö¸ÏòµÄµØÖ·µ¥Ôª¡£
³öÕ»(pop)£ºÕ»¶¥Ö¸ÕëESPÖ¸ÏòµÄÕ»ÖÐÊý¾Ý±»È¡»Øµ½¼Ä´æÆ÷£»Õ»¶¥Ö¸ÕëESPÔö¼Ó4¸ö×Ö½Ú¡£

ͼ6 ³öÕ»ÈëÕ»²Ù×÷ʾÒâ
¿É¼û£¬Ñ¹Õ»²Ù×÷½«¼Ä´æÆ÷ÄÚÈÝ´æÈëÕ»ÄÚ´æÖÐ(¼Ä´æÆ÷ÔÄÚÈݲ»±ä)£¬Õ»¶¥µØÖ·¼õС£»³öÕ»²Ù×÷´ÓÕ»ÄÚ´æÖÐÈ¡»Ø¼Ä´æÆ÷ÄÚÈÝ(Õ»ÄÚÒÑ´æÊý¾Ý²»»á×Ô¶¯ÇåÁã)£¬Õ»¶¥µØÖ·Ôö´ó¡£Õ»¶¥Ö¸ÕëESP×ÜÊÇÖ¸ÏòÕ»ÖÐÏÂÒ»¸ö¿ÉÓÃÊý¾Ý¡£
µ÷ÓÃ(call)£º½«µ±Ç°µÄÖ¸ÁîÖ¸ÕëEIP(¸ÃÖ¸ÕëÖ¸Ïò½ô½ÓÔÚcallÖ¸ÁîºóµÄÏÂÌõÖ¸Áî)ѹÈë¶ÑÕ»£¬ÒÔ±¸·µ»ØÊ±Äָܻ´Ö´ÐÐÏÂÌõÖ¸ÁȻºóÉèÖÃEIPÖ¸Ïò±»µ÷º¯Êý´úÂ뿪ʼ´¦£¬ÒÔÌø×ªµ½±»µ÷º¯ÊýµÄÈë¿ÚµØÖ·Ö´ÐС£
À뿪(leave)£º »Ö¸´Ö÷µ÷º¯ÊýµÄÕ»Ö¡ÒÔ×¼±¸·µ»Ø¡£µÈ¼ÛÓÚÖ¸ÁîÐòÁÐmovl %ebp, %esp(»Ö¸´ÔESPÖµ£¬Ö¸Ïò±»µ÷º¯ÊýÕ»Ö¡¿ªÊ¼´¦)ºÍpopl
%ebp(»Ö¸´ÔebpµÄÖµ£¬¼´Ö÷µ÷º¯ÊýÖ¡»ùÖ¸Õë)¡£
·µ»Ø(ret)£ºÓëcallÖ¸ÁîÅäºÏ£¬ÓÃÓÚ´Óº¯Êý»ò¹ý³Ì·µ»Ø¡£´ÓÕ»¶¥µ¯³ö·µ»ØµØÖ·(֮ǰcallÖ¸Áî±£´æµÄÏÂÌõÖ¸ÁîµØÖ·)µ½EIP¼Ä´æÆ÷ÖУ¬³ÌÐòתµ½¸ÃµØÖ·´¦¼ÌÐøÖ´ÐÐ(´ËʱESPÖ¸Ïò½øÈ뺯ÊýʱµÄµÚÒ»¸ö²ÎÊý)¡£Èô´øÁ¢¼´Êý£¬ESPÔÙ¼ÓÁ¢¼´Êý(¶ªÆúһЩÔÚÖ´ÐÐcallǰÈëÕ»µÄ²ÎÊý)¡£Ê¹ÓøÃÖ¸Áîǰ£¬Ó¦Ê¹µ±Ç°Õ»¶¥Ö¸ÕëËùÖ¸ÏòλÖõÄÄÚÈÝÕýºÃÊÇÏÈǰcallÖ¸Áî±£´æµÄ·µ»ØµØÖ·¡£
»ùÓÚÒÔÉÏÖ¸ÁʹÓÃCµ÷ÓÃÔ¼¶¨µÄ±»µ÷º¯ÊýµäÐ͵ĺ¯ÊýÐòºÍº¯Êý°ÏʵÏÖÈçÏ£º

ÈôÖ÷µ÷º¯ÊýºÍµ÷º¯Êý¾ùδʹÓþֲ¿±äÁ¿¼Ä´æÆ÷EDI¡¢ESIºÍEBX£¬Ôò±àÒëÆ÷ÎÞÐëÔÚº¯ÊýÐòÖÐ¶ÔÆäѹջ£¬ÒÔ±ãÌá¸ß³ÌÐòµÄÖ´ÐÐЧÂÊ¡£
²ÎÊýѹջָÁîÒò±àÒëÆ÷¶øÒ죬ÈçÏÂÁ½ÖÖѹջ·½Ê½»ù±¾µÈЧ£º

Á½ÖÖѹջ·½Ê½¾ù×ñÑCµ÷ÓÃÔ¼¶¨£¬µ«·½Ê½¶þÖÐÖ÷µ÷º¯ÊýÔÚµ÷Ó÷µ»Øºó²¢Î´ÏÔʽÇåÀí¶ÑÕ»¿Õ¼ä¡£ÒòΪÔÚ±»µ÷º¯ÊýÐò½×¶Î£¬±àÒëÆ÷ÔÚÕ»¶¥Îªº¯Êý²ÎÊýÔ¤ÏÈ·ÖÅäÄÚ´æ¿Õ¼ä(subÖ¸Áî)¡£º¯Êý²ÎÊý±»¸´ÖƵ½Õ»ÖÐ(¶ø·ÇѹÈëÕ»ÖÐ)£¬²¢Î´ÐÞ¸ÄÕ»¶¥Ö¸Õ룬¹Êµ÷Ó÷µ»ØÊ±Ö÷µ÷º¯ÊýÒ²ÎÞÐèÐÞ¸ÄÕ»¶¥Ö¸Õë¡£gcc3.4(»ò¸ü¸ß°æ±¾)±àÒëÆ÷²ÉÓøü¼Êõ½«º¯Êý²ÎÊý´«µÝÖÁÕ»ÉÏ£¬Ïà±ÈÕ»¶¥Ö¸ÕëËæÃ¿´Î²ÎÊýѹջ¶ø¶à´ÎÏÂÒÆ£¬Ò»´ÎÐÔÉèÖúÃÕ»¶¥Ö¸Õë¸üΪ¸ßЧ¡£ÉèÏëÁ¬Ðøµ÷Óöà¸öº¯Êýʱ£¬·½Ê½¶þ½öÐèÔ¤ÏÈ·ÖÅäÒ»´Î²ÎÊýÄÚ´æ(´óС×ã¹»ÈÝÄɲÎÊý³ß´çºÍ×î´óµÄº¯Êý¼´¿É)£¬ºóÐøµ÷ÓÃÎÞÐèÿ´Î¶¼»Ö¸´Õ»¶¥Ö¸Õë¡£×¢Ò⣬º¯Êý±»µ÷ÓÃʱ£¬Á½ÖÖ·½Ê½¾ùʹջ¶¥Ö¸ÕëÖ¸Ïòº¯Êý×î×ó±ßµÄ²ÎÊý¡£±¾ÎIJ»ÔÙÇø·ÖÁ½ÖÖѹջ·½Ê½£¬"ѹջ"»ò"ÈëÕ»"ËùÌáÖ®´¦¾ù°´ÏàÓ¦»ã±à´úÂëÀí½â£¬ÈôÎÞ»ã±àÔòÖ¸·½Ê½¶þ¡£
ijЩÇé¿öÏ£¬±àÒëÆ÷Éú³ÉµÄº¯Êýµ÷ÓýøÈë/Í˳öÖ¸ÁîÐòÁв¢²»°´ÕÕÒÔÉÏ·½Ê½½øÐС£ÀýÈ磬ÈôCº¯ÊýÉùÃ÷Ϊstatic(Ö»ÔÚ±¾±àÒëµ¥ÔªÄڿɼû)ÇÒº¯ÊýÔÚ±àÒëµ¥ÔªÄÚ±»Ö±½Óµ÷Óã¬Î´±»ÏÔʾ»òÒþʽȡµØÖ·(¼´Ã»ÓÐÈκκ¯ÊýÖ¸ÕëÖ¸Ïò¸Ãº¯Êý)£¬´Ëʱ±àÒëÆ÷ȷПú¯Êý²»»á±»ÆäËü±àÒëµ¥Ôªµ÷Óã¬Òò´Ë¿ÉËæÒâÐÞ¸ÄÆä½ø/³öÖ¸ÁîÐòÁÐÒÔ´ïµ½ÓÅ»¯Ä¿µÄ¡£
¾¡¹ÜʹÓõļĴæÆ÷Ãû×ÖºÍÖ¸ÁîÔÚ²»Í¬´¦ÀíÆ÷¼Ü¹¹ÉÏÓÐËù²»Í¬£¬µ«´´½¨Õ»Ö¡µÄ»ù±¾¹ý³ÌÒ»Ö¡£
×¢Ò⣬ջ֡ÊÇÔËÐÐʱ¸ÅÄÈô³ÌÐò²»ÔËÐУ¬¾Í²»´æÔÚÕ»ºÍÕ»Ö¡¡£µ«Í¨¹ý·ÖÎöÄ¿±êÎļþÖн¨Á¢º¯ÊýÕ»Ö¡µÄ»ã±à´úÂë(ÓÈÆäÊǺ¯ÊýÐòºÍº¯Êý°Ï¹ý³Ì)£¬¼´Ê¹º¯ÊýûÓÐÔËÐУ¬Ò²ÄÜÁ˽⺯ÊýµÄÕ»Ö¡½á¹¹¡£Í¨¹ý·ÖÎö¿ÉÈ·¶¨·ÖÅäÔÚº¯ÊýÕ»Ö¡Éϵľֲ¿±äÁ¿¿Õ¼ä׼ȷֵ£¬º¯ÊýÖÐÊÇ·ñʹÓÃÖ¡»ùÖ¸Õ룬ÒÔ¼°Ê¶±ðº¯ÊýÕ»Ö¡ÖжԱäÁ¿µÄËùÓÐÄÚ´æÒýÓá£
|