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