Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Написание отладчика-перехватчика в Win32:)

8.8K
18 октября 2004 года
Brother Det Jr.
1 / / 18.10.2004
Пишу перехват вызовов DLL-функций на основе DebugHelp API.
За основу взял статью на
http://delphiworld.narod.ru/base/use_debug_api.html

(Вряд ли кто-нибудь захочет вникать, но всё же).

Возникли следующие вопросы по данному листингу.
RestoreBreak: Boolean; - флажок, который указывает обработчику события EXCEPTION_SINGLE_STEP надо ли восстанавливать точку останова.
Отладчик "в учебных целях" перехватывает только одну функцию. А если перехватывать много? Тогда - по флажку на каждую функцию, что ли?

if RestoreBreak and (Context.EIP >= BPAddr) and (Context.EIP <= BPAddr + 32) then
Эээ... Это мы так учитываем тот факт, что после выполнения одной инструкции IP смещается на длину инструкции? По-моему, правильнее было бы определять длину исходной инструкции. Кстати, никто не знает, как это сделать? А то совсем не хочется копаться в Instruction Set Reference Manual от Intel.

Кстати, BPAddr тоже, наверное, надо заводить на каждую перехватываемую функцию? Да и OrigByte, наверно?

"...иногда процесс не завершается корректно (к примеру, отладчик, который отлаживает отладчик, который отлаживает отладчик..." - когда конкретно так бывает?

if RestoreBreak and (Context.EIP >= BPAddr) and (Context.EIP <= BPAddr + 32) then
begin
...
end
else
if RestoreBreak then
Context.EFlags := Context.EFlags or EFLAGS_TRACE;
Когда может возникнуть этот else?

С надеждой на ответ,
Brother Det Jr.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог