> Не хочу ничего сказать, но MMU других процессоров (на плечи которых и
> ложится обеспечение защиты памяти) по общей своей идее почему-то довольно похожи
> на то что у х86.Уверены?
> Примерно такие же страницы и что там еще.
Вот-вот. Большинство разрабов процов хватило только на страницы.
> Все, включая ваш любимый MS на "лишние" кольца
> дружно забили и ограничились двумя.
э? Винда на старте поддерживала x86, mips и alpha, потом добавили ppc. Какой там mmu в этих других процах можете сами почитать. А то что Линус не осилил сегментную модель памяти... что можно ожидать от эмулятора терминала.
>> В результате мы имеем такие бонусы как buffer overflow позволяющие
>> загрузить и выполнить код,
> Не вижу как лишние кольца помогли бы борьбе с переполнением буфера.
Потому что о том как устроен PM в 286+ вы читали в журнале мурзилка (хотя сомневаюсь что вы этот журнал в глаза видели). Для выполнения задачи в PM необходимо LDT, TSS, и три сегмента: code, data, stack. Это уровень организации приложения. Каждый тип сегмента имеет свои уникальные свойства. Сегмент кода всегда RO, а на сегмент данных или стека нельзя сделать джамп. Так вот, для приложения эти три сегмента делаются непересекаемыми, в итоге в случае buffer overflow с загрузкой кода и попыткой перехода мы получим банальный GP.
О том как можно эффективно использовать 4 уровня привелегий подумайте сами.
> На самом деле, execute без read - это из разряда "хочу есть,
> но не ртом". На такие извращения процессоры никто не рассчитывал и
Я ж таки прав. О PM в 286+ вам явно Рабинович на хинди напел.
http://pdos.csail.mit.edu/6.828/2005/readings/i386/s06_03.htm.
> это ограничение наверное можно попробовать обойти окольными путями,
Обойти? Если влезть на уровень mmu то всё обойти можно, а так если сегменты не пересекаются, то никак.