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

Discussion in 'WASM.WIN32' started by Wolfgang, Aug 9, 2005.

Thread Status:
Not open for further replies.
  1. Wolfgang

    Wolfgang New Member

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

    Dr.Golova New Member

    Blog Posts:
    0
    выставь trap-flag в eflags и получишь еще один int 1 когда выполнится инструкция меняющаяя dr, потом поставишь GD, отпустишь прогу и будет тебе щастье.
     
Thread Status:
Not open for further replies.