Exception в Dll, загруженной из памяти
От: InstantI Украина  
Дата: 06.08.10 19:41
Оценка:
Доброго времени суток.
Столкнулся с такой странной проблемой, загружаю Dll из памяти, используя этот
Автор: Виталий
Дата: 09.01.04
код.
Внутри этой dll у меня есть код вида:
try
{
  DoSomething();  // throw std::exception() отсюда 
}
catch (std::exception&)
{
  return;
}
catch (...)
{
  return;
}

И это исключение не перехватывается, ни в 1-м, ни во 2-м catch'e. Обернул в try\catch и вызов функции из dll, эффект остался тот-же, приложение падает из-за неперехваченного исключения. В отладчике вывод вида "Unhandled exception at 0x7558b727 in hello.exe: Microsoft C++ exception: std::exception at memory location 0x0018f588.". При этом если грузить Dll с диска то все ок. Почему так происходит и как это исправить?) Спасибо за ответы.
Re: Exception в Dll, загруженной из памяти
От: uzhas Ниоткуда  
Дата: 06.08.10 20:47
Оценка: +1 :)
Здравствуйте, InstantI, Вы писали:

II>Доброго времени суток.

II>используя этот
Автор: Виталий
Дата: 09.01.04
код.


там предупреждение есть:

Beware of bugs.

Re: Exception в Dll, загруженной из памяти
От: ononim  
Дата: 06.08.10 21:22
Оценка:
II>Доброго времени суток.
II>Столкнулся с такой странной проблемой, загружаю Dll из памяти, используя этот
Автор: Виталий
Дата: 09.01.04
код.

Этот код не добавляет загруженную длл в PEB ldr list, результат — GetModuleFileName, GetModuleHandle etc работать не будут. + NtQueryVirtualMemory будет отдавать "неадекватные" данные на адресах этой длл.
Не говоря уж о том что в приведенном коде загрузчика возможно тупо есть какой то баг.
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.