Какой тип исключения должен быть? - PullRequest
2 голосов
/ 13 июня 2011

При выполнении этой инструкции я получил исключение

LFS   ESI,PWORD PTR [EBP+12]

С этой страницы http://wiki.osdev.org/Double_Fault#Double_Fault
Любая инструкция PUSH или POP или любая инструкция, использующая ESP или EBP в качестве базового регистра, выполняетсяв то время как адрес стека не в канонической форме.

Так что я думаю, что здесь должна быть ошибка сегмента стека .Но система дает общее исключение защиты (0D).

Может кто-нибудь сказать мне, почему это так?

1 Ответ

1 голос
/ 14 июня 2011

Общая ошибка защиты LFS возникает, когда:

  1. индекс селектора сегмента, который вы пытаетесь загрузить, не соответствует ограничениям таблицы дескрипторов
  2. сегмент находится в таблице дескрипторов, но это не читаемый сегмент данных
  3. ваш уровень привилегий выше (то есть меньше привилегий), чем уровень привилегий для дескриптора.

Итак, проблема не в самой инструкции, но таблица дескрипторов сегментов.

См. главу 3 в Руководстве разработчика программного обеспечения Intel, том 3A: http://www.intel.com/products/processor/manuals/?wapkw=(Intel+64+and+IA-32+Architectures)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...