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

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

Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 25 октября 2010 15:39
· Личное сообщение · #1

Пи трассировке по F7 на каждой инструкции возникает трассировочное исключение из за того что взведен трассировочный бит.

А как работает трассировка по F8 особенно если такой код:

00F7A005 E8 01000000 CALL VideoCon.00F7A00B
00F7A00A CC INT3
00F7A00B 58 POP EAX
00F7A00C 89C3 MOV EBX,EAX


В этой функции CALL VideoCon.00F7A00B находится код который модифицирует INT3 в такой код:

00F7A005 E8 01000000 CALL VideoCon.00F7A00B
00F7A00A 0058 89 ADD BYTE PTR DS:[EAX-77],BL

И вообще как работает трассировка по F8 у Олли поскольку в этом случае она выдает исключение, а по F7 работает нормально.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше




Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 25 октября 2010 16:25
· Личное сообщение · #2

gena-m
SHIFT+F8 ?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 25 октября 2010 18:26
· Личное сообщение · #3

F7 - трасер с заходом в функцию (CALL), F8 - трасер без захода в функцию. В первом случае если eip на call, то следующей трассируемой инструкцией будет первая инструкция в функции по адресу CALL'а, во 2м случае трасер поставит прерывание на инструкции ниже CALL'а, сбросит флаг трассировки и дождется пока выполнится функция и управление всплывет на поставленном прерывании.

gena-m пишет:
И вообще как работает трассировка по F8 у Олли поскольку в этом случае она выдает исключение, а по F7 работает нормально.

Скорее всего получается довольно забавная ситуация: Исключение попадает на INT3, код модифицирует олькино прерывание, поэтому по F8 отладчик его не получает, а обработчик остается до следующего прерывания, которое не имеет отношения к отладке, поэтому обработчик не знает что с ним делать, отладка срывается.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 25 октября 2010 19:10
· Личное сообщение · #4

Записывает брейк после процедуры.



Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 25 октября 2010 19:52 · Поправил: gena-m
· Личное сообщение · #5

Итого обобщаем:
При трассировке по F8 Олли записывает INT3 поверх INT3, т.е в коде ничего не меняется а Олли записывает к себе в таблицу адрес этого INT3. При модификации этого кода просто не будет срабатывать бряк на адресе 00F7A00A и Олли вместо F8 фактически делает F9, пока не нарывается на другое исключение, которое к этому месту не имеет никакого отношения,вот такой вариант больше похож на то что происходит.

Спасибо всем.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





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

Создано: 26 октября 2010 15:37
· Личное сообщение · #6

Не всегда, в настройках ольки можно поставить, чтобы юзала ДР вместо инт3.


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