Спрашиваю на форуме С++, поскольку только среди сишников велика вероятность найти грамотного системщика.
Вопрос собственно вот в чем.
В фирменном руководстве от 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. |
Т.е. если я правильно понимаю, то сегменты кода, данных и стека получаются полностью перекрыты в рамках процесса.
Но каким образом тогда осуществляется защита от изменения кода или переполнения стека в рамках процесса?