> соответственно поток который я создал в этой области > возвращаеца на освобожденную память - вот и тупик... > висим... ((( а зачем ему возвращаться ?
ExitThread() вызывай
Народ, а скажите как мне сделать так, чтобы моя ДЛЛ, загруженная в область другого процесса с помощью хука, при снятии хука не высвобождала память, взятую при своей работе?
просто получаеца облом... я ставлю ДЛЛ, создаю свой поток в удаленном процессе, а када я снимаю хук, то ДЛЛ выгружаеца вместе со всеми делами и машина безвозвратно виснет потому что на месте процедуры моего потока кукиш....? как это исправить?
мне нужно чтобы память которую я отхватил в чужом процессе оставаась при нем после выгрузки ДЛЛ....
буду очень рад любым предложениям... это будет очень кстати...
> > машина безвозвратно виснет > странно > должна быть просто "недопустимая операция" > попробуй лог писать > > > мне нужно чтобы память которую я отхватил в чужом > процессе > > оставаась при нем после выгрузки ДЛЛ.... > а VirtualAlloc пробовал ?
1) стоит SoftIce. он и вылетает... а прога безвозвратно потеряна...
2) да, сначала я юзал LocalAlloc. потом тоже подумал что может VirtualAlloc будет надежнее, но не дало результата... соответственно поток который я создал в этой области возвращаеца на освобожденную память - вот и тупик... висим... (((
посему я сейчас в deadlock'е - я не знаю как это обойти.... %(
> соответственно поток который я создал в этой области > возвращаеца на освобожденную память - вот и тупик... > висим... ((( а зачем ему возвращаться ?
ExitThread() вызывай
[C++] [Win32] неее. вы не поняли...28.05.02 04:35 Автор: BXS Статус: Незарегистрированный пользователь
дело вот в чем:
с помощью хука я закидываю ДЛЛ в чужой процесс(функция хука - это просто заглушка, она мне не нужна. мне нужен лишь вызов DllEntryPoint). DllEntryPoint делает следующее: а) выделяет память (из области чужого процесса разумееца) б) копирует туда обработчик Thread'а. в) запускает его
Все что делает Thread - это for(;;){WaitForSingleObject(событие,таймаут)}. событие - это индикатор на завершение Thread'а изнутри (как раз чтоб он с ExitThread выходил). я намеренно не генерю это событие (эт на всяк случай... чтоб было).
поскольку событие не выполняеца, то цикл повторяеца... таким образом я могу делать что-либо в чужом процессе.
а вот теперь самая гадкая вещь
после того как я закрываю хук, он выгружает ДЛЛ из области процесса. а эта зараза видимо освобождает всю выделенную во время работы память. поэтому по истечении таймаута мой Thread отсасывает по полной программы, потому что изпод него выдернули память как ковер.. вот он и вешает мне машину...
каким образом мне избежать этого - я не понимаю...
как мне сделать так, чтоб после выгрузки ДЛЛ (по завершению хука) у меня оставалась память а не нагло удалялась???????????????
[C++] [Win32] неее. вы не поняли...28.05.02 11:14 Автор: ggg <ggg> Статус: Elderman
ИМХО память там не освобождается
когда ты выгружаешь длл, то исчезает import table и ты не можешь вызывать функции API
нужно до выгрузки узнавать адреса функций через GetProcAddress и потом пользоваться этими указателями
ещё не должно быть глобальных переменных или констант - этого ничего нет после выгрузки модуля
p.s.
кстати ты случайно не beginthread() используешь ?
p.p.s
лучше из DllMain всё в хук перенеси
так спокойнее