· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Про исключения

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Мар 5, 2004 23:27:12

Ситуация такая, есть код типа:

exec_addr:
jmp jmp_addr

А память по addr не существует или недоступна для выполнения. Как достать этот exec_addr, а то jmp_addr достать легко, а тот никак. Это хотя бы возможно вообще?


Дата: Мар 8, 2004 20:44:17

Я что-то вопроса краями не догнал :(


Дата: Мар 8, 2004 22:55:11

В смысле из обработчика SEH достать адрес exec_addr. jmp_addr лежит в контексте(EIP) и в поле ExceptionAddress. Хотя я понял уже, невозможно достать.


Дата: Мар 8, 2004 23:06:13

Так exec_addr и есть EIP, т.е. адрес инструкции, которая вызвала исключение.


Дата: Мар 9, 2004 10:20:00

Я смотрел, там jmp_addr. Сначала управление передаётся, а потом памяти нет и возникает исключение.


Дата: Мар 9, 2004 18:40:41

Слушай, а по человечески сформулировать можно? Я читал, наверное, раза три. Так ничего и не понял :(


Дата: Мар 9, 2004 18:57:35

Чего ж тут не понять ;-)


Дата: Мар 9, 2004 19:14:35

А вот тупой я!
Из структур SEH можно достать многое -> слепок потока на момент сбоя. А уж будет там EIP сбойной инструкции, или EIP инструкции ПОСЛЕ нее, зависит от типа исключения - трап это, или фолт. Другое дело, что я вообще смысла вопроса понять не могу :(


Дата: Мар 9, 2004 19:22:35

dragon пытался об'яснить что сначала происходит прыжок и только потом возникает исключение, в связи с этим как узнать именно адрес этого прыжка??

Я в АСПре такое часто наблюдаю, Olly вываливается на какой-нить адрес и говорит что-то типа "кода нет" ;-)


Дата: Мар 9, 2004 20:29:07

Ага. Понял. Наконец-то :)
Ответ: никак.


Дата: Мар 10, 2004 15:38:07

Да, жалко, что никак. Можно было бы конечно поискать по память инструкцию jmp, или jmp eax, если адрес в регистре, но это вряд ли сработает, т.к. можно переход сделать ешё по ret(push addr/ret), или jmp [eax+ebx*4+12345h], так что облом.


Дата: Мар 10, 2004 16:41:53

Только трейсить и вести лог автоматически, но вот только зачем это надо?


Дата: Мар 10, 2004 18:53:35

Да всё это XProtector раскопать пытаюсь, там спёртые байты, их найти надо как-то. Вот и хотел таким способом.


Дата: Мар 10, 2004 22:35:11

Asterix совершенно правильно заметил - его надо трейсить. Только движок трейсера надо писать самому - это должен быть специальный движок, во многом отличный от движков отладчиков (того же OllyDbg, например). Если хочешь - дам тебе наброски своей третьей части упаковщиков - там я описываю некоторые принципы. Быть может, тебе это окажется полезным...


Дата: Мар 11, 2004 00:17:06

Трейсер в любом случае работает через int1, а там оно перехвачено вроде, Ollydbg с синим экраном вылетает. И замеры времени выполнения кода точно есть. Сначала надо найти все эти места.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.124