On Sun, Sep 30, 2012 at 10:10:43PM +0400, "Артём Н." wrote: > >>>>>> Пока мне не очень понятно зачем это нужно, если возможно полагаться на загрузчик. > >>>>> Менять .text в рантайме - плохо. Надо пояснять почему? > >>>> Да, неплохо бы. Ведь, по-идее, изменение производится ещё до передачи > >>>> управления, так что, такая ли большая разница (если не брать в расчёт протекторы > >>>> и прочую навесную фигню, которая может при этом не работать)? > >>> Страницы кода нельзя оставлять readonly (а это несекурно) > >> Хм... А поставить им аттрибут после патчинга нельзя? > > Видимо нет. > Хм... Почему? Не знаю, но раз не ставят, значит нельзя или не имеет смысла. Возможно, флаги доступа ставятся линкером, а не лоадером, и это важно (я не очень хорошо знаю эту тему). > >> Весть есть библиотеки..? > > Мы как раз о случае с двумя процессами, загрузившими одну библиотеку. > Так, вроде, успешно расшаривают..? На что тогда DLL и прочее? Нельзя шарить страницу, отредактированную в двух процессах, как минимум потому что она по-разному отредактирована. > >>> патчинг занимает время. > >> Ну да. Только вот неизвестно насколько оно больше затрат времени, при выполнении > >> базонезависимого кода. > > Как уже было показано, на не-i386 от PIC оверхед незначительный, а на i386 > > другие плюсы всё равно перевешивают.. > > > >> И как часто приходится патчить... > > Всмысле? Каждую инструкцию, вызывающую код из другого объекта. > В смысле, насколько часто адрес загрузки отличается от базового адреса? С ASLR (по умолчанию в 2.6.12+) - всегда. Без - тоже всегда, у эльфов базовый адрес никто не меняет. > Особенно, для исполняемых файлов (ведь большинство без релоков)? Не понял вопроса. Исполняемый файл, собранный без PIE, грузится по одному адресу и обращается к GOT по константному указателю, вычисляемому при сборке. У собранного с PIE всё точно так же, как у библиотек, если включен ASLR (а без него включать PIE вроде вообще смысла нет). -- WBR, wRAR
Attachment:
signature.asc
Description: Digital signature