![]() |
eXeL@B —› Вопросы новичков —› Вопрос по отладке с помощью регистров DR0-DR3 |
Посл.ответ | Сообщение |
|
Создано: 02 августа 2011 12:34 · Поправил: Promix_17 · Личное сообщение · #1 |
|
Создано: 02 августа 2011 12:40 · Личное сообщение · #2 |
|
Создано: 02 августа 2011 13:22 · Поправил: Promix_17 · Личное сообщение · #3 |
|
Создано: 02 августа 2011 13:29 · Поправил: Модератор · Личное сообщение · #4 |
|
Создано: 02 августа 2011 13:39 · Личное сообщение · #5 Promix_17 http://www.wasm.ru/article.php?article=debugreg ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 02 августа 2011 13:48 · Поправил: ARCHANGEL · Личное сообщение · #6 Promix_17 Отладчик (debugger) через LPC-порт отладки ожидает событий отладки от отлаживаемого приложения (debuggee). Для Win32 API это реализуется через WaitForDebugEvent. В общем, отладка - это один большой бесконечный цикл на WaitForDebugEvent. Конечно, интересные события - это не только исключения, но, например, запуск и завершение процесса, подгрузка и выгрузка динамических библиотек и т.д. Но можно выделить два наиболее интересных исключения: EXCEPTION_BREAKPOINT и EXCEPTION_SINGLE_STEP. Перед тем, как исключение будет передано программе, вначале будет обращение через EPROCESS к полю отладочного порта, и если оно не нулевое, то это значение передаётся отладчику, причём дважды. Если отладчик вернул EXCEPTION_NOT_HANDLED, иксепшн развернётся внутри debuggee. Для начала советую почитать Дж.Роббинса "Отладка приложений". Далее глянуть третью часть "Об упаковщиках в последний раз". Потом погуглить по форуму - вопрос про отладочные регистры уже поднимался. bowrouco, опять ты, нуб? Открывай "Внутреннее устройство Windows" на стр. 120 и читай, стоя, вслух, сто раз: Точки прерывания в отлаживаемой программе являются распространенной причиной исключений. Поэтому диспетчер исключений первым делом проверяет, подключен ли к процессу, вызвавшему исключение, отладчик. Если подключен и системой является Windows 2000, диспетчер исключений посылает отладчику через LPC первое предупреждение. (Это уведомление на самом деле сначала поступает диспетчеру сеансов, а тот пересылает его соответствующему отладчику.) В Windows ХР и Windows Server 2003 диспетчер исключений посылает сообщение объекта отладчика (debugger object message) объекту отладки (debug object), сопоставленному с процессом (который внутри системы рассматривается как порт). И нехрен пи*деть, не разобравшись, олень. ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 02 августа 2011 13:52 · Личное сообщение · #7 |
|
Создано: 02 августа 2011 13:59 · Поправил: bowrouco · Личное сообщение · #8 ARCHANGEL Отладочный порт это условное название. Это не LPC-порт, а евент, через который синхронно доставляются сообщения. Отладчик работает с этим обьктом(DebugObject), если его нет, то сообщения шлются на порт исключений в подсистему. Смотрите реализацию DbgkForwardException(). > Открывай "Внутреннее устройство Windows" на стр. 120 и читай, стоя, вслух, сто раз: Нахер, сурсы есть! И посты твои глупые и высокомерные. Да и про матчасть малчал бы лучше, у тебя разрыв шаблона, изза излишка терминов(KiTrap etc), которые между собой не стыкуются, в силу не знания этой самой матчасти. Когда придёт полное логичное осознание, тогда будешь отсылать других её учить. Оминь. ![]() |
|
Создано: 02 августа 2011 14:03 · Поправил: bowrouco · Личное сообщение · #9 |
|
Создано: 02 августа 2011 14:13 · Личное сообщение · #10 |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос по отладке с помощью регистров DR0-DR3 |
Эта тема закрыта. Ответы больше не принимаются. |