linux Äں˿ª·¢ÈËÔ±×î½üÔÚÄÚºËÓʼþÁбíÖз¢²¼ÁËÒ»×éÐ嵀 rfc ²¹¶¡£¬½¨Ò齫¿ÉÖØ¶¨Î»µÄ x86_64 ÄÚºËÒÔ pie£¨position-independent executable£¬Î»ÖÃÎ޹ؿÉÖ´ÐÐÎļþ£©¸ñʽ½øÐÐÁ´½Ó¡£´Ë¾ÙºËÐÄÄ¿±êÊÇÇ¿»¯Äں˰²È«ÐÔ£¬²¢ÎªºóÐø¸üÉî²ã´ÎµÄ°²È«¼Ó¹Ìµì¶¨»ù´¡¡£

PIE ¸ñʽʹµÃÄÚºËÄܹ»ÔÚÔËÐÐʱ±»¼ÓÔØµ½ÈÎÒâÄÚ´æµØÖ·£¬ÏÔÖøÌáÉý¹¥»÷ÕßÍÆ²â¹Ø¼üº¯Êý»òÊý¾ÝλÖõÄÄѶȡ£¸Ã»úÖÆÒÑÔÚÓû§¿Õ¼ä³ÌÐòÖй㷺²¿Êð£¬ÊÇÔöÇ¿µØÖ·¿Õ¼ä²¼¾ÖËæ»ú»¯£¨ASLR£©Ð§Á¦µÄ¹Ø¼ü¼¼ÊõÖ®Ò»¡£ÔÚÄÚºËÖÐÒýÈë PIE£¬¿ÉÓëÏÖÓÐ KASLR£¨Äں˵ØÖ·¿Õ¼ä²¼¾ÖËæ»ú»¯£©»úÖÆÐͬ¹¤×÷£¬ÐγɸüÑÏÃܵÄÄÚ´æ±£»¤Ìåϵ¡£
²¹¶¡×÷Õß Ard Biesheuvel ±íʾ£¬´Ëǰ x86_64 ƽ̨³¤ÆÚδÆôÓà PIE£¬Ö÷ÒªÊÜÏÞÓÚÈô¸ÉʵÏÖÕϰ£¬°üÀ¨¶ÔÌØÊâ PIE Ö¸ÁîÉú³ÉµÄÖ§³ÖÐèÇó¡¢È«¾ÖÆ«ÒÆ±í£¨GOT£©´¦Àí¸´ÔÓÐÔ¡¢Ç±ÔڵĶþ½øÖÆÌå»ýÅòÕÍÒÔ¼°ÐÔÄܹËÂÇ¡£±¾´Î²¹¶¡·½°¸Í¨¹ý±ÜÃâʹÓà GOT ²å²ÛÀ´Éú³É PIE ¼æÈÝ´úÂ룬²¢Õë¶ÔÖ÷Á÷±àÒëÆ÷£¨GCC Óë Clang£©½øÐÐÁ˳ä·ÖÑéÖ¤£º
- ´úÂë³ß´çÔö·ù¿ØÖÆÔÚÔ¼ 0.2%£¨Clang£©ÖÁ 0.5%£¨GCC£©Ö®¼ä
- ÔÚ¶àÖÖ CPU ΢¼Ü¹¹ÉÏ£¬½èÖúµäÐÍ»ù×¼²âÊÔ£¨Èç hackbench£©ÆÀ¹À£¬Î´·¢ÏֿɲâÁ¿µÄÐÔÄÜϽµ¡£
¸Ã²¹¶¡¼¯¹²°üº¬ 19 ¸ö¶ÀÁ¢²¹¶¡£¬µ±Ç°ÈÔ´¦ÓÚ RFC£¨Õ÷ÇóÒâ¼û¸å£©½×¶Î£¬ÉÐδ½øÈëÕýʽºÏ²¢Á÷³Ì£¬ÊÇ·ñÄÉÈëÖ÷ÏßÄÚºËÈÔÓдýÉçÇøÆÀÉóÓë¾ö²ß¡£Ðè×¢ÒâµÄÊÇ£¬ÕâЩ±ä¸ü½öÔÚÆôÓà CONFIG_RANDOMIZE_BASE£¨¼´¼¤»î KASLR ¼°Ïà¹Ø°²È«Ñ¡ÏµÄ¹¹½¨ÅäÖÃÏÂÉúЧ£»Èô¸ÃÑ¡Ïî±»½ûÓã¬Ôò¼ÌÐøÑØÓÃÏÖÐеĴ«Í³Á´½Ó·½Ê½¡£
Remover ¼¸ÃëÖÓÈ¥³ýͼÖв»ÐèÒªµÄÔªËØ
ÏÂÔØÈô×îÖÕ»ñÅúºÏÈ룬Õ⽫³ÉΪ Linux Äں˰²È«ÑݽøÖеÄÒ»¸ö±êÖ¾ÐÔ½øÕ¹£¬ÓÐÍû´ó·ùÌá¸ßÄں˾µÏñµÖÓù»ùÓÚÄÚ´æÂ©¶´ÀûÓù¥»÷µÄÄÜÁ¦¡£¶ÔÓÚÇ¿µ÷°²È«ÐԵķþÎñÆ÷»·¾³¡¢ÔÆÆ½Ì¨»ù´¡ÉèÊ©¼°Ç¶ÈëʽϵͳµÈ³¡¾°£¬¸ÃÌØÐÔ»ò½«Ìṩ¸üΪ¿É¿¿µÄµ×²ã·À»¤Ö§³Å¡£
Ô´ÂëµØÖ·£ºµã»÷ÏÂÔØ
