[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Вопросы по созданию пакета.



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 что-то не особо понимал. Вроде бы въехал.


Reply to: