короче драйвер одного девайса глючит, вываливается окно с Exception:
Access Violation.
заказчик нашей проги рвет и мечет.
сорсов драйвера нет и не предвидется, кому интересно - это драйвер четырехпотоковой платы Dialogic (фирма недавно куплена Intel'ом).
в связи с этим вопрос:
можно ли отслеживать обращение чужой проги к определенному диапазону адресов, с целью обмануть ее.
например, прога делает:
mov EDI,0
mov EAX,[EDI]
а я возникающее исключение ловлю,
делаю
mov EAX,0; например
и передаю управление следующей после вызвавшей исключение команде этого долбанного драйвера:(
--------
что посоветуете?
пропатчить Ntoskrnl не предлагайте:)
[Win32] можно ли повесить хук на обращение к определенному участку памяти?12.10.01 10:34 Автор: z0 <z0> Статус: Member
> можно ли отслеживать обращение чужой проги к определенному > диапазону адресов, с целью обмануть ее. > > например, прога делает: > > mov EDI,0 > mov EAX,[EDI] > > а я возникающее исключение ловлю, > делаю > mov EAX,0; например > и передаю управление следующей после вызвавшей исключение > команде этого долбанного драйвера:( > -------- > что посоветуете? > пропатчить Ntoskrnl не предлагайте:)
так как ты пишешь - это сделать можно
например:
1) кодишь свой драйверок
2) грузишь его после глючного драйвера, это в registry настраивается
3) в своем устанавливаешь exception handler перехватчики на то что нужно - GPF, PF etc
4) в своем handlere проверяешь по EIP в стеке откуда fault
5) если из глючного драйвера - то "передаешь управление следующей после вызвавшей исключение
> команде этого долбанного драйвера:( " - меня терзают смутные сомнения что это правильный ход это раз, большинство этих fault-ов будет рестартуемые поэто придется еще и вычислять этот "следующий адрес" если Page Fault то видимо придется залазить в таблицу страниц для проверки - может это нормальный свопинг
но не проще ли разобраться с этим глючным драйвером один раз и пропатчить его как следует
если у тебя в soft-ice установлено faults on то тебя и выбросит в него после команды типа mov eax,ds:[0]
посмотреть почему так и исправить глюк
Всем спасибо! увы, SoftIce запустить не получится, на это есть причины12.10.01 12:06 Автор: йцукенг <jcukeng> Статус: Member
> если у тебя в soft-ice установлено faults on то тебя и > выбросит в него после команды типа mov eax,ds:[0] > посмотреть почему так и исправить глюк
дело в том, что сей баг только на работающей системе случается;
плата стоит у заказчика на работающей системе. вылетающий exception, как ни странно, не выводит систему из работоспособного состояния полностью, SoftIce же выведет и заказчик нас скушает не поморщившись.
стоит плата как чугунный мост:), купить для экспирементов не получится.
оказалось, что cb правильно отметил, что баг не в драйвере, а в библиотеке(dll),
обращающейся к этому драйверу.
при инициализации библиотеки она создает несколько потоков, в одном из них этот exception и вылетает.
еще раз всем спасибо, будем копать.
[Win32] можно ли повесить хук на обращение к определенному участку памяти?12.10.01 08:56 Автор: cb <cb> Статус: Member
> короче драйвер одного девайса глючит, вываливается окно с > Exception: > Access Violation.
судя по Exception ошибка происходит не в KernelMode - иначе синий экран гарантирован. скорее всего ошибка в какой-то dll предоставляющей доступ к драйверу.
> в связи с этим вопрос: > можно ли отслеживать обращение чужой проги к определенному > диапазону адресов, с целью обмануть ее.
можно попробовать загрузить свою dll в чужой процесс и поставить UnhandledExceptionFilter (см. SetUnhandledExceptionFilter) и при возникновении исключения найти место ошибки. если точно знать в каком потоке (thread) это происходит можно попытаться заюзать SEH.
cb.
[C++] [Win32] можно ли повесить хук на обращение к определенному участку памяти?11.10.01 17:01 Автор: Лamo Статус: Незарегистрированный пользователь
под Маздаем9х есть VMM-сервис Hook_PM_Fault, а также Hook_Invalid_Page_Fault. Вызываешь их из VxD,
и вешаешь свою Ring0-программу обработки. Под НТями не знаю и ДДК под рукой нету, сорри.