ловушки с DPL0

Тема в разделе "WASM.ASSEMBLER", создана пользователем 0136, 5 дек 2007.

  1. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    Всем привет, вопрос, так ли это:
    пусть элемент 13 таблицы IDT (нарушение общей защиты) будет оформлен в виде ловушки, с DPL=0. Если в программе с PL3 фиксируется нарушение общей защиты (например, привышение лимита сегмента), то процессор попытается вызвать обработчик нарушения общей защиты и обнаружит, что шлюз сильно привилегирован. Правило защиты по привилегиям не соблюдается, и процессор сформирует второе нарушение общей защиты.

    Спрашиваю, потому что эта инфа из книги Микропроцессор 486, а некоторые личности говорят что в мануалах Intel сказано - DPL шлюза процессор игнорирует !
    Всем спасибо за внимание :)
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Это одна из самых жесточайших опечаток книги. К счастью, практически единственная.

    DPL шлюза прерывания учитывается только в том случае, если произошло "программное" прерывание, т.е. int N. Когда источник прерывания сам процессор, то DPL шлюза обработчика прерывания не учитывается.

    Помимо этого привилегии не учитываются для команды int3 (0xCC которая).
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну и bound (#OF)
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Учитываются. Лично проверял. Если DPL для 3-его вектора в IDT нулевой, то int3 вызывает #GP.
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    DPL проверяецо при int n, int 3, INTO и должен быть не меньше CPL , иначе расстрел. и в манах от интела это довольно четко описанно.. и то, что при хардварном прерывании DPL не проверяецо - тоже
     
  6. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Забавно, но вот что я нашёл про int3 (0xcc) "The interrupt is taken without
    faulting at any IOPL level." (3-471).
    хм... ниче не понимаю? посмотрите на дефлотные записи idt в windows что у int 1 что у int 3 DPL = 0. Но при встречающихся опкодах (в юзермоде ессесно) 0xcc, int 1, установке tf флага хендлеры int 1 и int 3 всё-же получают.
     
  7. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Intel mans:
    // format changed
     
  8. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Посмотрел. Система XP SP2, чистая (никаких kernel-mode отладчиков нет).
    int1: DPL=0, что и понятно: tf вызывает аппаратное исключение #DB, при котором процессор не проверяет DPL.
    int3: DPL=3, как и должно быть.