Не смотря на гибкость средств защиты, имеющихся в процессорах (защита на уровне таблиц дескрипторов, защита на уровне сегментов, защита на уровне страниц) в существующих системах (как в Windows, так и в Unix) полноценено используется только страничная защита, которая хотя и может уберечь код от записи, но не может уберечь данные от выполнения. (Может быть, с этим и связано изобилие уязвимостей систем?)
Все сегменты адресуются с нулевого линейного адреса и простираются до конца линейной памяти. Разграничение процессов производится только на уровне страничных таблиц.
В связи с этим все модули линкуются не с начальных адресов, а с достаточно большим смещением в сегменте. В Windows используется базовый адрес в сегменте - 0x400000, в юникс (Linux или FreeBSD) - 0x8048000.
Некоторые особенности так же связаны со страничной организацией памяти.
ELF файлы линкуются таким образом, что границы и размеры секций приходятся на 4-х килобайтные блоки файла.
А в PE формате, не смотря на то, что сам формат позволяет выравнивать секции на 512 байт, используется выравнивание секций на 4к, меньшее выравнивание в Windows не считается корректным.
Ну, вот собственно и все на сегодня.
С файлами мы примерно разобрались, о чем пойдет речь дальше - пока не знаю. Обещаю только что речь, о чем нибудь, пойдет обязательно. :) Жду ваших отзывов, возможно, они помогут мне определиться с темой следующего выпуска.
Вновь приношу свои извинения за длительный перерыв.
Отправлено 2001-11-12 для 5364 подписчиков.
ведущий рассылки Dron
Сайт проекта
Архив Рассылки
При поддержке Kalashnikoff.ru