Очень тупой вопрос. Вот есть какая-нибудь софтина, которая должна работать как DLL. Т.е. раньше это было простое приложение, сейчас его надо переделать в дллку, которую будет запускать кто-то там через RUNDLL или память или еще как нибудь. Не суть. Вопрос в другом. Вот есть код: Код (ASM): work proc uses ebx ... тут основной код приложения .. ret work endp LibMain proc instance:DWORD,reason:DWORD,reserved:DWORD .if reason == DLL_PROCESS_ATTACH mov eax,1 .endif Реально ли сделать как-то автозапуск процедуры work (в которой основная логика приложения). Как я понимаю, вставить call work в process_attach нельзя, т.к. загрузчик не поймет, подгрузилась дллка или нет. Вариант - создавать в process_attach новый поток с рабочей процедурой потока - work. (CreateThread, ThreadProc - work). Нормально ли такое решение? Или может есть еще какое-то? Экспортировать функцию нельзя/либо она неизвестно, как будет называться. Так было бы самое простое решение (вызвать функцию из длл), но такое решение неприемлемо. Загрузчик только подгружает длл, а там дальше она сама уже должна запустить что надо.
f13nd, как же тогда быть? Как делают люди, чтоб грамотно было и работало везде? Когда-то видел 100500 семплов малвари , которая работает в виде дллки, сейчас же не могу найти пример.
Если инжектишь эту длл внешним приложением, наверное лучше создать в ней поток CreateRemoteThread, если через Appinit_DLLs или еще как-то, то наверное по стеку можно пройтись и подменить адрес возврата из LdrLoadDll и поймав управление там, уже создавать поток. Честно говоря не сталкивался с тем, чтоб это исключение вызывало, просто обсуждалось недавно на другом форуме.
Инжектить не я буду, я не знаю как и кто будет запускать (через rundll, маппинг в памяти , etc. ). Важно, что должно сразу запускаться, без вызова каких-то функций.
f13nd, та функция не будет экспортироваться, вот в чем проблема. Короче, я сделал так - в _ATTACH идет вызов функции, а в ней уже идет вызов потока. Так проблем быть не должно вроде?
На старых виндах могут быть. DllMain c DLL_PROCESS_ATTACH вызывается LdrLoadDll. Правильней всего из одной из экспортируемых функций создавать поток.