Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
eXeL@B —› Программирование —› DLL & DLL_THREAD_DETACH |
Посл.ответ | Сообщение |
|
Создано: 16 мая 2008 21:27 · Поправил: Nukimi · Личное сообщение · #1 Всех приветствую. Помогите разобраться в проблеме. Есть DLL: .code DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved:DWORD cmp reason,1 jnz ___NotFunction call ___Function ___NotFunction: mov eax,TRUE ret DllEntry Endp End DllEntry Эту DLL я внедряю в процесс. Внедрение успешно. DLL начинает работать. Всё срабатывает. Первый раз DLL вызывается с параметром DLL_PROCESS_ATTACH. Всё отлично. Но второй раз DLL вызывается уже с параметром DLL_THREAD_DETACH. Хотя вчера всё работало, никаких DLL_THREAD_DETACH не было и DLL успешно функционировала в процессе. Почему она может выкидываться? По каким причинам ей посылают DLL_THREAD_DETACH? |
|
Создано: 16 мая 2008 23:02 · Личное сообщение · #2 |
|
Создано: 16 мая 2008 23:12 · Личное сообщение · #3 |
|
Создано: 16 мая 2008 23:23 · Поправил: asmfan · Личное сообщение · #4 DLL_THREAD_DETACH
|
|
Создано: 16 мая 2008 23:42 · Личное сообщение · #5 |
|
Создано: 17 мая 2008 00:43 · Личное сообщение · #6 Av0id пишет: DisableThreadLibraryCalls? В процессе нет этого. Поэтому, думаю, не в этом дело. К тому же сначала она работала, а вот на следующий день почему то начала выгружаться. FrenFolio пишет: На чем пишешь? Дык На Ассемблере. Tim пишет: значит в процессе, куда ты ее внедрил, завершается поток, какой-либо. зачем тебе проверять это событие? игнорируй и все. Я понимаю что в процессе что то завершилось, только при чём тут моя DLL. Она выполняется 1 раз и тут же выгружается зачем то. Я хочу понять причину и что бы у меня работала DLL в процессе |
|
Создано: 17 мая 2008 05:08 · Личное сообщение · #7 Nukimi ты не понял. DLL это такая вещь которой процесс всегда посылает состояния тредов. Создался тред - длл получила сообщение DLL_THREAD_ATTACH, умер тред длл получила сообщение DLL_THREAD_DETACH. Если ты не хочешь их обрабатывать фильтруй эти события, если не хочешь чтобы они вообще тебе приходили юзай DisableThreadLibraryCalls. Это никаким боком не касается твоей DLL, разбирайся в причинах выгрузки а не с левыми сообщениями. ----- Yann Tiersen best and do not fuck |
|
Создано: 19 мая 2008 10:16 · Личное сообщение · #8 |
|
Создано: 19 мая 2008 10:22 · Личное сообщение · #9 Угу. У меня была такая проблемы. Внедрял dll библиотекой MS-Rem-а с помощью CreateRemoteThread. А в dll делал сплайсинг функций. Так вот как только поток, который я создал завершался, а завершался он быстро, то прога делала UnloadLibrary моей внедренной dll и в итоге все кончалось GPF, когда перехвачченная функция обращалась по адресу, где была загружена раньше моя функция. В итоге плюнул пока на задачу ибо нет времени разбиратся почему dll выгружается. И кстати dll получала перед выгрузкой сообщения DLL_THREAD_DETACH, DLL_PROCESS_DETACH |
|
Создано: 19 мая 2008 10:44 · Личное сообщение · #10 |
|
Создано: 19 мая 2008 11:30 · Личное сообщение · #11 undb, почитал твою ссылку, спасибо - вот набрел [QUOTE] Если DllMain вернет FALSE (неудачная инициализация), система автоматически отключит образ файла DLL от адресного пространства процесса, а вызов LoadLibrary(Ex) даст NULL. [/QUOTE] Хех, в Дельфи DllProc определена как процедура, а не функция, и не имеет результата. Соответственно я и не следил что там в EAX по выходе из DllMain Нужно вечерком поэкспериментировать. |
|
Создано: 19 мая 2008 11:49 · Личное сообщение · #12 |
|
Создано: 19 мая 2008 12:01 · Поправил: Ice-T · Личное сообщение · #13 |
eXeL@B —› Программирование —› DLL & DLL_THREAD_DETACH |