сабж один процесс инжектит DLL в другой процесс первому надо передать в DllMain которая загружена во второй процесс несколько байт трабл в том что DllMain не принимает юзерских аргументов поэтому надо какой то IPC какой вариант правильный ? из того что не хочется общий маппинг, через файл на диске, через реестр, через переменные окружения (и так уже начудил с возвращаемым значением), и тем более не маилслоты и пайпы конкретно надо 4 байта передать хочется как то локально что бы несколько инстансов программы работать могли инжект обычный через RtlCreateUserThread которая запускает шеллкод записанный в целевой процесс который и грузит DLL почему сделал так ? потому что надо было возвращать код ошибки определенный мной почему DllMain веренула FALSE как я сделал в DllMain устанавливается переманнная окружения для процесса SetEnvironmentVariable а по возвращении в шеллкод из LoadLibrary преобразую его в число и возвращаю результат вот это делает DllMain Код (Text): VOID SetError(DWORD dwError) { CHAR szErr[256]; sprintf(szErr, "%lu", dwError); SetEnvironmentVariable("0xdeadc0de", szErr); } а вот это шеллкод Код (Text): __declspec(dllexport) VOID WINAPI Shell(REMSTART *pCtx) { pCtx->pLoadLibraryA(pCtx->sz); CHAR szVar[] = {'0','x','d','e','a','d','c','0','d','e','\0'}; CHAR szErr[256]; if (!pCtx->pGetEnvironmentVariableA(szVar, szErr, sizeof(szErr))) pCtx->pExitThread(ERROR_LOAD_HOOK_DLL); DWORD dwError = 0; for (DWORD i = 0; szErr[i]; i++) { dwError *= 10; dwError += szErr[i] - '0'; } pCtx->pExitThread(dwError); } попутно вопрос может как то попроще можно вернуть код ошибки в инжектирующий процесс из DllMain ? надо выдавать точное сообщение не загрузилась потому то потому то если GetEnvironmentVariable вернет ошибку я делаю вывод что зафейлилась сама LoadLibrary и код в DllMain вообще управление не получал иначе он бы в любом случае установил переменную окружения с успешным или каким то неуспешным кодом [added] кстати вот еще одна причина почему шеллкод грузит DLL почему то поток созданный через RtlCreateUserThread не имеет адреса возврата из стартовой процедуры адрес которой передается RtlCreateUserThread как аргумент поэтому работает только когда явно вырубаеш поток ExitThread естественно если точкой входа указывать LoadLibrary все зафейлится так как LoadLibrary попытается вернуть управление.. почему на стеке нет адреса возврата никто не знает ? ось винда 5.1
ну вот что ты опять нагородил? потом удивляешься, че я твой код называю говнокодом... что тебе мешает оставить DllMain пустой, а всю инициализацию и тд вынести в отдельную экспортную функцию... а в шелл-коде после LoadLibrary вставить GetProcAddress на инициализирующую функцию, которая у тебя может быть такой, какой ты захочешь... допустим она будет возвращать код ошибки: DWORD InitFunc... тогда достаточно pCtx->pExitThread(pInitFunc()) и забрать в своем процессе код ошибки с помощью функции GetExitCodeThread... более того, такой вариант предпочтительнее, тк скорее всего не может вызвать дедлока в коде загрузщика при создании потоков в DllMain и тд... и не будет никакого бреда и палева по переменным окружения, и не надо переводить код ошибки в строку и обратно... это все очень дико смотрится...
....Здесь был поток чего-то непонятного... [modnote=TermoSINteZ]Забанен за мат и оскорбление.[/modnote]
Нас снова посетил г-н Clerk, насколько понимаю? =) Что ж, позвольте выступить в этой высокоумной дискуссии третьей стороной. Так вот, наведя справки, я узнал, что у Вас очень оригинальный, если не сказать экстравагантный, стиль мышления. В частности, трюк с запуском Olly из-под Olly в своё время сделал меня охренеть и просветлиться. Но, прошу заметить — оригинальность просто ради оригинальности есть дурной тон. Иногда самое верное решение всё-таки может лежать на поверхности, в чём Вас и пытается убедить г-н Rel. А уж тем более не является хорошим тоном вместо контр-аргументации играть в «бокс по переписке» и швыряться в оппонента оскорблениями (да ещё и с таким количеством орфографических ошибок). Это, прошу прощения, стиль обиженного школьника. В общем и целом — имейте мужество признать, что иногда бываете неправы.
Ок, забудём об "архитектуре" сего кода, гхм. Чем тебе LPC не нравится? Local Procedure Call, если поточнее. Нугуглить, что это за механизм сможешь сам, надеюсь.
DEEP Нет, в тот раз вы ошиблись(не каждый инде кто ругается матом). Инде не может такой дебильны вопрос задавать. Вдобавок у меня не хватило сейчас терпения дочитать вопрос тс доконца, я бы ответил Вопросы по загрузчику кстате из той области, где корректно поставленный вопрос содержит в себе ответ.