On Sun, Sep 30, 2012 at 06:04:15PM +0400, "Артём Н." wrote: > >>>>>>>> Кстати, а hardening (например, проверка стека) сильно влияет на > >>>>>>>> производительность? > >>>>>>> stackprotector - вряд ли заметно, pie - да на i386, остальное скорее > >>>>>>> вообще никак. > >>>>>> Да, а на не 64-битных не влияет? Почему? Разве есть какие-то > >>>>>> кардинальные отличия? > >>>>> PIC/PIE занимает один регистр, который на i386 очень мало. > >>>> Если не хватает регистров, он использует стэк? > >>> Зависит. > >>> Обычно наоборот, если есть свободные регистры, туда можно сунуть локальные > >>> переменные вместо стека. > >> В смысле, для вычисления адресов, при использовании PIE используется много > >> регистров, а если они заняты, компилятору приходится гонять данные между > >> стеком > >> и регистрами. Потому на x86 и тормозит, а в x64 добавили регистры, так что > >> их > >> там хватает. Так? > > Хм, я сейчас нашёл, что на amd64 и каких-нибудь других архитектурах вообще > > не занимается регистр, т.к. достаточно уметь адресацию через %rip. На i386 > > да, всегда занят один регистр, там лежит адрес GOT. > Хм... Так таблица смещений всё-равно должна быть, независимо от архитектуры? Да, без дополнительного indirection (как это по-русски) не обойтись никак, но на это какие-то совсем незначительные расходы.
> И, кстати, по-идее, PE базонезависимы, поскольку есть таблица релокаций, а > ELF - > нет (насколько я понял, PIE - это независимость от адреса загрузки образа)? Я не в курсе, что происходит с DLL, если RVA недоступен, и так ли же это затратно, как в non-PIC ELF (Дреппер намекает, что это дизайн ELF виноват). Пишут, впрочем, что на x86_64 в PE тоже PIC. PIC/PIE это независимость от адреса загрузки образа, да. -- WBR, wRAR
signature.asc
Description: Digital signature

