Linuxϵͳϲ¡¶¾µÄÑо¿

×÷Õß: ·çÓêÎÞ×è 2005-11-24 00:49:48
1¡¢¼ò½é

¡¡¡¡±¾ÎÄÌÖÂÛÁËÒ»¸öÐÞ¸ÄELFÎļþʵÏÖ¹²Ïí¿âµ÷ÓÃÖض¨ÏòµÄ·½·¨¡£Ð޸ĿÉÖ´ÐÐÎļþµÄ³ÌÐòÁ¬½Ó±í(Procedure Linkage Table)¿ÉÒÔʹ±»¸ÐȾµÄÎļþµ÷ÓÃÍⲿµÄº¯Êý¡£ÕâÒª±ÈÐÞ¸ÄLD_PRELOAD»·¾³±äÁ¿ÊµÏÖµ÷ÓõÄÖض¨ÏòÓÅÔ½µÄ¶à£¬Ê×ÏȲ»Ç£³¶µ½»·¾³±äÁ¿µÄÐ޸ģ¬Æä´ÎÊǸüΪÒþ±Î¡£±¾ÎĽ«Ìṩһ¸ö»ùÓÚx86/LinuxµÄʵÏÖ¡£Èç¹ûÄã¶ÔUNIXϵͳ ²¡¶¾±È½Ï¸ÐÐËȤÇë²Î¿¼ÒÔÏÂÍøÖ·£º

¡¡¡¡http://virus.beergrave.net/ (UNIX²¡¶¾ÓʼþÁбí)
¡¡¡¡http://www.big.net.au/~silvio (×÷ÕßÖ÷Ò³)

¡¡¡¡2¡¢³ÌÐòÁ¬½Ó±í(Procedure Linkage Table)

¡¡¡¡ÏÂÃæÊÇELF¹æ·¶ÖУ¬¹ØÓÚ³ÌÐòÁ¬½Ó±íµÄÐðÊö£º

¡¡¡¡³ÌÐòÁ¬½Ó±í(PLT)

¡¡¡¡ÔÚELFÎļþÖУ¬È«¾ÖÆ«ÒƱí(Global Offset Table,GOT)Äܹ»°ÑλÖÃÎ޹صĵØÖ·¶¨Î»µ½¾ø¶ÔµØÖ·£¬³ÌÐòÁ¬½Ó±íÒ²ÓÐÀàËƵÄ×÷Óã¬ËüÄܹ»°ÑλÖÃÎ޹صĺ¯Êýµ÷Óö¨Ïòµ½¾ø¶ÔµØÖ·¡£Á¬½Ó±à¼­Æ÷(link editor)²»Äܽâ¾ö³ÌÐò´ÓÒ»¸ö¿ÉÖ´ÐÐÎļþ»òÕß¹²Ïí¿âÄ¿±êµ½ÁíÍâÒ»¸öµÄÖ´ÐÐתÒÆ¡£½á¹û£¬Á¬½Ó±à¼­Æ÷Ö»ÄÜ°Ñ°üº¬³ÌÐòתÒÆ¿ØÖƵÄһЩÈë¿Ú°²Åŵ½³ÌÐòÁ¬½Ó±í(PLT)ÖС£ÔÚsystem VÌåϵÖУ¬³ÌÐòÁ¬½Ó±íλÓÚ¹²ÏíÕýÎÄÖУ¬µ«ÊÇËüÃÇʹÓÃ˽ÓÐÈ«¾ÖÆ«ÒƱí(private global offset table)ÖеĵØÖ·¡£¶¯Ì¬Á¬½ÓÆ÷(ÀýÈ磺ld-2.2.2.so)»á¾ö¶¨Ä¿±êµÄ¾ø¶ÔµØÖ·²¢ÇÒÐÞ¸ÄÈ«¾ÖÆ«ÒƱíÔÚÄÚ´æÖеÄÓ°Ïó¡£Òò¶ø£¬¶¯Ì¬Á¬½ÓÆ÷Äܹ»Öض¨ÏòÕâЩÈë¿Ú£¬¶øÎðÐèÆÆ»µ³ÌÐòÕýÎĵÄλÖÃÎÞ¹ØÐԺ͹²ÏíÌØÐÔ¡£¿ÉÖ´ÐÐÎļþºÍ¹²ÏíÄ¿±êÎļþÓи÷×ԵijÌÐòÁ¬½Ó±í¡£

¡¡¡¡.PLT0ushl got_plus_4
¡¡¡¡jmp *got_plus_8
¡¡¡¡nop£» nop
¡¡¡¡nop£» nop
¡¡¡¡.PLT1:jmp *name1_in_GOT
¡¡¡¡pushl $offset
¡¡¡¡jmp .PLT0@PC
¡¡¡¡.PLT2:jmp *name2_in_GOT
¡¡¡¡pushl $offset
¡¡¡¡jmp .PLT0@PC
¡¡¡¡.......

¡¡¡¡.PLT0ushl 4(%ebx)
¡¡¡¡jmp *8(%ebx)
¡¡¡¡nop£» nop
¡¡¡¡nop£» nop
¡¡¡¡.PLT1:jmp *name1@GOT(%ebx)
¡¡¡¡pushl $offset
¡¡¡¡jmp .PLT0@PC
¡¡¡¡.PLT2:jmp name2@GOT(%ebx)
¡¡¡¡pushl $offset
¡¡¡¡jmp .PLT0@PC
¡¡¡¡....

Ïà¹Ø×ÊѶ