30.09.2012 22:33, Andrey Rahmatullin пишет: > On Sun, Sep 30, 2012 at 10:10:43PM +0400, "Артём Н." wrote: >>>>>>>> Пока мне не очень понятно зачем это нужно, если возможно полагаться на >>>>>>>> загрузчик. >>>>>>> Менять .text в рантайме - плохо. Надо пояснять почему? >>>>>> Да, неплохо бы. Ведь, по-идее, изменение производится ещё до передачи >>>>>> управления, так что, такая ли большая разница (если не брать в расчёт >>>>>> протекторы >>>>>> и прочую навесную фигню, которая может при этом не работать)? >>>>> Страницы кода нельзя оставлять readonly (а это несекурно) >>>> Хм... А поставить им аттрибут после патчинга нельзя? >>> Видимо нет. >> Хм... Почему? > Не знаю, но раз не ставят, значит нельзя или не имеет смысла. Возможно, > флаги доступа ставятся линкером, а не лоадером, и это важно (я не очень > хорошо знаю эту тему). В смысле, ставит-то всё-равно загрузчик? Линкер просто выставляет флаги в заголовке? Насколько я помню, в виндоус вначале производится применение релокаций, затем применяются атрибуты страниц. А как-то иначе оно может работать?
>>>> Весть есть библиотеки..? >>> Мы как раз о случае с двумя процессами, загрузившими одну библиотеку. >> Так, вроде, успешно расшаривают..? На что тогда DLL и прочее? > Нельзя шарить страницу, отредактированную в двух процессах, как минимум > потому что она по-разному отредактирована. Блин. Понял. Системные библиотеки (в windows, к примеру), поэтому всегда имеют фиксированный адрес загрузки? >>>> И как часто приходится патчить... >>> Всмысле? Каждую инструкцию, вызывающую код из другого объекта. >> В смысле, насколько часто адрес загрузки отличается от базового адреса? > С ASLR (по умолчанию в 2.6.12+) - всегда. Без - тоже всегда, у эльфов > базовый адрес никто не меняет. Хм... Любопытно, тогда как работает ASLR для библиотек, в которых секция кода разделяется? Или в Linux нет чего-то подобного kernel32.dll (т.е. всё только через libc обёртки над системными вызовами, через прерывания, например)? >> Особенно, для исполняемых файлов (ведь большинство без релоков)? > Не понял вопроса. Исполняемый файл, собранный без PIE, грузится по одному > адресу и обращается к GOT по константному указателю, вычисляемому при > сборке. У собранного с PIE всё точно так же, как у библиотек, если включен > ASLR (а > без него включать PIE вроде вообще смысла нет). Голова работает плохо. :-( Сначала я совершенно забыл про ASLR и как PIE относится к Hardening что-то не особо понимал. Вроде бы въехал. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

