Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Снова SEH, или задачка обратная тривиальной. Добавлено: 22.11.06 18:40  

Автор вопроса:  LamerOnLine | ICQ: 334781088 
В очередной раз делаю заход да VBшную беспомощьность при возникновении исключений. Задача продолжения работы уже не стоит, цель - залогировать сам факт и основные параметры необработанного исключения, после чего завершить программу в обычном для gpf порядке.
Столкнулся с одной проблемой - имея адрес возникновения исключения я не могу получить хендл модуля, размешенного по нему и, как следствие, имя этого модуля.
АПИ в данном случае не помогают, полномасштабную ручную раскрутку стека проводить желания нет. Ищу варианты.
Ну в этом и, собственно, вопрос. Кстати, юбилейный :)

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #1 Добавлено: 22.11.06 19:31
Без приколов - честно, на VB такое, снимаю шляпу :-|

Первое что голову пришло,- при старте проги
разблокировать от read-only немножко места в PE-загруженого заголовка
и сохранить там хендл модуля(ей).

Т.е. что-то типа

     hModule=GetModuleHandle("";)
     hModuleKeeped=hModule+&h200 ' там все равно всякая ненужная чушь
     VirtualProtect(hModuleKeeped, &h100,%PAGE_READWRITE,BYREF OldProtect)
     WriteProcessMemory(GetCurrentProcessID(),hModuleKeeped, BYREF hModule,4,0)


ну и при возникновении SEH, вытаскивать от туда хэндл.

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 23.11.06 10:50
На самом деле это ActiveX библиотека на C++. Просто подключаю её к VB проекту, в котором нет кода, только создание объекта. В сяшном конструкторе класса задаю через SetUnhandledExceptionFilter свою функцию-фильтр, в которой сохраняю время и код ошибки в файл. Но! Задача именно в том, как, имея Eip, получить того хендл модуля. По правде говоря, не вижу как WriteProcessMemory тут поможет :(

Ответить

Номер ответа: 3
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #3
Добавлено: 24.11.06 19:41
ToolHelp (вроде так называется) апи используй. я этого не делал, но дамперы умеют читать какие модули по каким адресам загружены. используй эти апи и сравнивай eip с положением модулей в памяти.

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 25.11.06 01:59
Ra$cal, судя по всему, имеет ввиду Module32First/Module32Next и MODULEENTRY32.modBaseAddr, modBaseSize и hModule

Ответить

Номер ответа: 5
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #5
Добавлено: 25.11.06 13:11
Дада, именно это и имел ввиду.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам