Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
слово "хук" я использовал некорректно. каюсь. увы, SEH не получается поюзать:)) 11.10.01 17:18 Число просмотров: 818
Автор: йцукенг <jcukeng> Статус: Member
|
|
<programming>
|
[Win32] можно ли повесить хук на обращение к определенному участку памяти? 11.10.01 15:27
Автор: йцукенг <jcukeng> Статус: Member
|
короче драйвер одного девайса глючит, вываливается окно с 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 Статус: Незарегистрированный пользователь
|
Хе-Хе-Хе :))
Access violation это помоему обращение к не корректному участку памяти, например када указатель = 0
Помоему хуки здесь не помогут
|
| |
слово "хук" я использовал некорректно. каюсь. увы, SEH не получается поюзать:)) 11.10.01 17:18
Автор: йцукенг <jcukeng> Статус: Member
|
|
| | |
Если ты напишешь что-то подобное Softice, то сможешь сделать задуманное 11.10.01 17:43
Автор: Cyril <sc> Статус: Member
|
А вообще-то я не совсем понял, НТ вываливается в синий экран с сообщением об ошибке или как.
P.S. Честно говоря, слабо представляю что можно придумать :-(
|
| | | |
синего экрана нет, но это не сильно утешает:(( 11.10.01 17:59
Автор: йцукенг <jcukeng> Статус: Member
|
|
| | | | |
синего экрана нет, но это не сильно утешает:(( 11.10.01 19:01
Автор: access_denied Статус: Незарегистрированный пользователь
|
под Маздаем9х есть VMM-сервис Hook_PM_Fault, а также Hook_Invalid_Page_Fault. Вызываешь их из VxD,
и вешаешь свою Ring0-программу обработки. Под НТями не знаю и ДДК под рукой нету, сорри.
|
|
|