Эмуляция битов NX - PullRequest
       37

Эмуляция битов NX

4 голосов
/ 16 января 2011

Может ли кто-нибудь объяснить мне, как можно эмулировать бит NX на таких платформах, как 32-битная x86, где аппаратное обеспечение этого не обеспечивает?Я был бы признателен за объяснение основ его эмуляции, поскольку я просто не представляю, как это можно реализовать.Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 16 января 2011

Возможно, вы захотите прочитать о Exec Shield , PaX PAGEEXEC и PaX SEGMEXEC .

0 голосов
/ 16 января 2011

Я никогда не реализовывал эмуляцию NX, но, зная кое-что о x86, я могу догадаться, как он может работать.

Все это связано с тем, как ядро ​​настраивает вашу глобальную таблицу дескрипторов ., чтобы определить, в каком диапазоне адресов может содержаться код.

Если можно кратко изложить это ... На x86 в 32-битном защищенном режиме те старые "регистры сегментов" из 16-битного кода по-прежнему имеюткакой-то смысл.Регистры сегментов определяют, какая запись в GDT используется.Записи GDT по сути являются диапазоном памяти.Если ядро ​​указывает регистр cs (сегмент кода) на запись GDT, которая имеет адреса только в диапазоне [x, y], то адреса вне этого диапазона не могут быть выполнены.

Обратите внимание, что это намногоболее грубый, чем бит NX, поскольку бит NX входит в запись таблицы страниц .Таким образом, бит NX позволяет пометить произвольную страницу как неисполняемую, тогда как использование cs сегментов позволяет указывать (как правило, большой, непрерывный) диапазон как неисполняемый.

...