Слежение за отладочными регистрами

Тема в разделе "WASM.WIN32", создана пользователем Wolfgang, 9 авг 2005.

Статус темы:
Закрыта.
  1. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    Есть задачка - отслеживать все модификации регистров DR0-DR3. Для этого я переопределил первый элемент таблицы IDT, создал свой обработчик первого прерывания, выставил бит GD в DR7. Но при первом же срабатывании прерывания бит GD в DR7 сбрасывается (это логично, иначе как получить доступ к отладочным регистрам при обработке прерывания без рекурсии). Обработчик вызывается в результате trap'а (т.е. по возвращении из обработчика управление будет передано той же инструкции, на которой trap и произошел), стало быть, выставить бит GD в обработчике нельзя, иначе trap возникнет сразу же при выходе из обработчика. Выставление флага RF в регистре EFLAGS, хранящемся в стеке на момент срабатывания обработчика, ничего не дает. Конечно, в обработчике можно подменять адрес возврата, пропуская инструкцию модификации DR0-DR3, но тогда значения регистров меняться не будут, что нежелательно. Так вот, как можно заставить проц не генерить отладочное прерывание на одной и той же инструкции повторно?
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    выставь trap-flag в eflags и получишь еще один int 1 когда выполнится инструкция меняющаяя dr, потом поставишь GD, отпустишь прогу и будет тебе щастье.
     
Статус темы:
Закрыта.