Сейчас на форуме: _MBK_, Adler (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Вопрос по отладке с помощью регистров DR0-DR3
Посл.ответ Сообщение

Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 02 августа 2011 12:34 · Поправил: Promix_17
· Личное сообщение · #1

Пишу отладчик. Присвоил DR0 нужное мне значение. Вопрос: где и как отловить отладочное исключение с номером 1? Желательно из ring-3, ведь работают же аппаратные точки останова в OllyDbg. Может ли отлаживаемая программа обработать это исключение с помощью SEH?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 августа 2011 12:40
· Личное сообщение · #2

1. dr0 не достаточно, dr7 ещё нужно
2. там же, где и все остальные исключения, код будет 80000004, если не ошибаюсь
3. может
Сходил бы ты в гугл, что ли.



Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 02 августа 2011 13:22 · Поправил: Promix_17
· Личное сообщение · #3

Archer пишет:
там же, где и все остальные исключения
- извиняюсь, но это где? В обработчике SEH отлаживаемого процесса?

Как можно установить свой собственный обработчик этого исключения из ring-3?

Я пака на самом начальном уровне написания отладчика.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 августа 2011 13:29 · Поправил: Модератор
· Личное сообщение · #4

Тебе виднее, ты отладчик пишешь. Или ты пишешь отладчик, который вообще не ловит исключения? Он телепатией отлаживает, что ли?
В обычных отладчиках это сделано на DebugAPI. При чём тут сех, вообще непонятно. Ещё раз говорю, сходи в гугл и погляди, хотя бы как отладчики вообще работают.



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 02 августа 2011 13:39
· Личное сообщение · #5

Promix_17 http://www.wasm.ru/article.php?article=debugreg

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....


| Сообщение посчитали полезным: Promix_17


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.




Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 02 августа 2011 13:52
· Личное сообщение · #7

Вопрос закрыт. Спасибо за информацию.



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 02 августа 2011 13:59 · Поправил: bowrouco
· Личное сообщение · #8

ARCHANGEL
Отладочный порт это условное название. Это не LPC-порт, а евент, через который синхронно доставляются сообщения. Отладчик работает с этим обьктом(DebugObject), если его нет, то сообщения шлются на порт исключений в подсистему. Смотрите реализацию DbgkForwardException().

> Открывай "Внутреннее устройство Windows" на стр. 120 и читай, стоя, вслух, сто раз:
Нахер, сурсы есть!

И посты твои глупые и высокомерные. Да и про матчасть малчал бы лучше, у тебя разрыв шаблона, изза излишка терминов(KiTrap etc), которые между собой не стыкуются, в силу не знания этой самой матчасти. Когда придёт полное логичное осознание, тогда будешь отсылать других её учить. Оминь.



Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 02 августа 2011 14:03 · Поправил: bowrouco
· Личное сообщение · #9

Promix_17
Не обязательно использовать отладочные апи для работы с HWB. При срабатывании генерится фолт(трап). Просто если подключен отладчик он получает сообщение. Можно и локально захэндлить(seh etc), но это уже не надстройка получится.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 августа 2011 14:13
· Личное сообщение · #10

Раз вопрос закрыт, закрою и топик.


 eXeL@B —› Вопросы новичков —› Вопрос по отладке с помощью регистров DR0-DR3
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати