Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Можете меня штрафовать, но я спрошу 12.02.02 21:45 Число просмотров: 716
Автор: Sandy <Alexander Stepanov> Статус: Elderman
|
> Почему нельзя писать по нулю ? > Только не бейте ногами ! > Итак: > mov eax, 0 > mov [eax], 3 > > Последняя инструкция эквивалентна mov DS:[eax], 3 > Все было бы прекрасно, если бы DS содержал 0 селектор, > тогда бы исключение было бы понятным, но DS содержит не > нулевой селектор. А в сегменте я могу смещатся на столько > на сколько мне позволяет его длинна. Хоть на 0, хоть на 1. > Мы же не в реальном режиме, где эти адреса забиты под > прерывания. > Итак, почему эксептион ?
Чтобы легче было отлавливать ошибки в программах, связанные с неинициализированными указателями, Винда запрещает обращение к адресам из первой страницы адресного пространства процесса.
Все указатели сегментов указывают на одно и то же адресное пространство. Т.е. CS:0 и DS:0 указывают на одну и ту же ячейку памяти, которая находится по адресу 0.
Из-за этого ЛЮБЫЕ обращения процесса к адресам в первой странице, не важно, что это за обращение: выполнение кода, стек, данные - возникает исключение Access violation.
|
|
|