Суть проблемы: есть упакованный ExeCryptor-ом dll-модуль. Пытаюсь вручную инициализировать его в контексте процесса (то есть без применения Windows API), для чего настраиваю релоки, импорт, экспорт, и вызываю TLS callback, созданный ExeCryptor-ом, после чего вызываю DllEntryPoint. Порблема в том, что во время выполнения TLS callback-a, созданного ExeCryptor-ом, процесс падает. Вызываю с параметрами (PIMAGE_TLS_CALLBACK)(HMODULE pvModuleBase, DLL_PROCESS_ATTACH, 0). Может кто-то вкурсе, как правильно вызвать TLS callback ExeCryptor-a???
Всем спасибо за внимание. Проблема частично решена. Оказалось, что ExeCryptor при упаковке исполняемого файла почему то привязывается к ImageBase, прописанном в модуле. При загрузке в процесс по отличному от ImageBase адресу код, созданный ExeCryptor-ом, выпадает в 0xC0000005. Псевдокод ручной загрузки: Код (Text): DWORD RequiredImageBase = OPTIONAL_HEADER.ImageBase; PVOID pvBaseModule = VirtualAlloc( (LPVOID)RequiredImageBase, required_size_of_module, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if ((ULONG)pvBaseModule != (ULONG)RequiredImageBase) return; InstallRelocs(pvBaseModule); // метод настройки релоков, InstallImport(pvBaseModule); // импорта, InstallExport(pvBaseModule); // экспорта, CallTlsCallbacks(pvBaseModule); // вызова TLS каллбэков (у ExeCryptor-а один каллбэк) CallDllEntry(pvBaseModule); // вызов EP модуля С удовольствием выслушаю ваши предложения по обходу ограничения по ImageBase