Здравствуйте, уважаемые! Вот такая проблема... При инжекте делеле в пользовательский процесс (binarnik.exe) наткнулся на ошибку: Главный тред стартует нормально, делает свою работу в контексте нужного процесса. Потом из главного потока создаются еще несколько тредов. CreateThread возвращает Ok, GetLastError пустой. В Диспетчере задач видно, что тред(ы) создались. Но они не выполняются... Для информации: dll - чистый win32 API. Без CRT. все довольно стандартно. binarnik.exe загружается немного не стандартно (база = 01000000). Пробовал уже и CreateThread со своим SECURITY_ATTR и размером стека, с которым она нормально работала (2 интеловских стринички). Куда копать???? Еще вопрос... Как этот процесс можно дебажить??? Я имею ввиду, когда в процесс инжектишь длл.
для того чтоб дебажить инжектируемый код, советую приаттачится к процесу в который происохдит инжект, а в сам код влепить на начало int 3, что сработает как бряк... а по поводу первой части ниче не понял если честно, лутчеб дал исходник...
Span http://www.wasm.ru/forum/viewtopic.php?id=14848 и 20 глава Рихтера Nouzui Code (Text): LibMain proc hInstDLL:DWORD,reason:DWORD,unused:DWORD .if reason==DLL_PROCESS_ATTACH invoke DisableThreadLibraryCalls,hInstDLL lea eax,Func invoke CreateThread,0,0,eax,0,0,offset return_ invoke Sleep,1000 .endif mov eax,1 ret LibMain Endp Func proc invoke MessageBox,0,0,0,0 invoke ExitProcess,0 ret Func Endp End LibMain Если вызывать так, то всё равно поток стартует только после выхода из длл майн. Или можно подругому?
пока выполнение находится внутри DllMain никакие изменения состояний потоков не случаются ни старты ни стопы - ничего критическая секция однако в LdrLoaderLock-е