В отладчике есть функция rClick->breakpoints->Hardware, on execution. Как она устроена? Я думал что ставится брякпоин в одном из отладочных регистров(собственно потому этих точек останова всего 4(DR0-3)), но тут до меня дошло: отладчик работает на 3-ем кольце привилегий и обращаться к ним от туда нельзя. Так как же оно работает?
Все это конечна интересна. Ну, если не секрет как же они там изменяются?(Судя по названию функций нахрена им вообще меняться?)
Stamerlan А как по твоему отладчик читает или изменяет данные в обычных регистрах, например, в EAX ? Тупо вызывает mov eax,0 в своем потоке или внедряет свой код в отлаживаемый поток ? Контекст потока это состояние всех его регистров, включая отладочные. Соответственно функции Get\SetThreadContext позволяют читать\изменять состояние регистров потока, включая отладочные регистры. Т.е. в юзермоде запрещено напрямую вызывать команды чтения\записи drX, но читать\изменять их через контекст потока - пожалуйста, попроси ОС и она это сделает для тебя в ring0