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

 eXeL@B —› Вопросы новичков —› Про брэкпоинты
Посл.ответ Сообщение

Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 апреля 2007 03:48
· Личное сообщение · #1

Как по сути происходит брэкпоинт? Что отладчик делает с программой чтоб она прервалась там где мы указали?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 06 апреля 2007 05:24
· Личное сообщение · #2

В общих чертах:

Вариант 1
Отладчик заменяет первый байт инструкции на CCh (int3).
Процессор, получая этот байт, генерирует отладочное прерывание.
Отладчик берёт управление из прерывания на себя.
Главный недостаток - изменяется значение в памяти (контрольная сумма - и пипец).
Можно так же поставить собственный обработчик прерывания, но суть от этого не изменится.

Вариант 2
В один из четырёх DR-отладочных регистров процессора, помещается адрес инструкции и проц генерирует int1, при условии EIP=DR0 or DR1 or DR2 or DR3. Это так называемые железные бряки.
Главный недостаток – бряков одновременно можно ставить всего 4.

Вариант 3
Бряк на обращение к памяти (читай учебники или ищи по форуму - RTFM).

-----
Всем привет, я вернулся




Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 апреля 2007 17:58
· Личное сообщение · #3

Спасибо за ответ!
А ты не мог бы в общих чертах обьяснить про перехвативание API. Есть такой способ - первые пять байтов поменять на длинный JMP. И в этой фразой у меня возникло 2 вопроса -
1) Где менять 5 байт
2)Куда прыжек (Как я понял в адресном пространстве dll записываеш твой код и прыжек на него - правильно?)



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 06 апреля 2007 21:50 · Поправил: sniperZ
· Личное сообщение · #4

satana пишет:
1) Где менять 5 байт

В начале функции, которую хочешь перехватить. Адрес м0жешь получить с помощью GetProcAddress...
satana пишет:
2)Куда прыжек (Как я понял в адресном пространстве dll записываеш твой код и прыжек на него - правильно?)

Правильно. Эти 5 байт и предназначены для прыжка на твой код.



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 апреля 2007 01:05
· Личное сообщение · #5

При изучении я столкнулся с непонятными терминами:

Что такое token процесса?

И еще довольно часто встречается thread - что это?



Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 апреля 2007 01:10
· Личное сообщение · #6

satana пишет:
первые пять байтов поменять на длинный JMP.

В каком смыслe длинный? Сначало я подумал что просто так автор выразился, но и в коде структура называется fr_jmp - или всетаки это обычный jmp?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 07 апреля 2007 02:44
· Личное сообщение · #7

satana, RTFM!
Ну, ты хоть чуть-чуть по форуму поищи, прежде чем вопросы задавать!

В любом учебнике по Асму написано:
jmp offset бывает трёх видов:
- короткий (опкод 1 байт + относительное смещение 1 байт).
- длинный (опкод 2 байта + относительное смещение 4 байта).
- дальний (тебе это не нужно, far-jmp используется для смены сегмента).

Короткий jmp может покрыть переход от текущего смещения только пределах -128 +127.
Дальше используется длинный.

satana пишет:
Что такое token процесса?
И еще довольно часто встречается thread - что это?

Срочно читать Дневники чайника!
А лучше сразу ищи книгу:
Джеффри РИХТЕР
"Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной версии Windows".

-----
Всем привет, я вернулся




Ранг: 13.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 апреля 2007 03:00
· Личное сообщение · #8

Спасибо


 eXeL@B —› Вопросы новичков —› Про брэкпоинты
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати