Защита сегментов в 64-х битном режиме

Leonid
Дата: 31.07.2015 16:53:47
Спрашиваю на форуме С++, поскольку только среди сишников велика вероятность найти грамотного системщика.

Вопрос собственно вот в чем.
В фирменном руководстве от Intel читаем следующее:

"Intel 64 and IA-32 Architectures Software Developer’s Manual"
3.3.4
...
64-bit mode — Segmentation is generally (but not completely) disabled, creating a flat 64-bit linear-address
space. Specifically, the processor treats the segment base of CS, DS, ES, and SS as zero in 64-bit mode (this
makes a linear address equal an effective address). Segmented and real address modes are not available in 64-
bit mode.

3.4.2.1
In 64-bit mode: CS, DS, ES, SS are treated as if each segment base is 0, regardless of the value of the associated
segment descriptor base. This creates a flat address space for code, data, and stack.
...
Limit checks for CS, DS, ES, SS, FS, and GS are disabled in 64-bit mode.

Т.е. если я правильно понимаю, то сегменты кода, данных и стека получаются полностью перекрыты в рамках процесса.
Но каким образом тогда осуществляется защита от изменения кода или переполнения стека в рамках процесса?
Dimitry Sibiryakov
Дата: 31.07.2015 17:07:52

Сегментов вообще не существует. Флаг защиты ставится на уровне страницы.

Posted via ActualForum NNTP Server 1.5

Leonid
Дата: 31.07.2015 17:18:29
Dimitry Sibiryakov
Сегментов вообще не существует. Флаг защиты ставится на уровне страницы.

Так страничное преобразование же одинаково для всего процесса.
Ну положим запись в код можно им предотвратить. Но как тогда предотвратить переполнение стека?
Dimitry Sibiryakov
Дата: 31.07.2015 17:23:49

В деталях описано у Рихтера.

Posted via ActualForum NNTP Server 1.5

Leonid
Дата: 31.07.2015 17:27:47
Dimitry Sibiryakov
В деталях описано у Рихтера.
ok Спасибо, будем посмотреть.
Basil A. Sidorov
Дата: 31.07.2015 19:44:23
Leonid
Но как тогда предотвратить переполнение стека?
Всё той же защитной страницей.
Да - накладно на большом количестве мелких стеков, да - защищает не от всех ошибок, но вполне рабочий вариант