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