Точка входа в exe библиотеку
От: segray  
Дата: 20.03.13 02:03
Оценка:
Всем привет.

Я пробую использовать exe программу как динамически загружаемую библиотеку. Функции экспортируются/импортируются нормально, но точка входа "dllmain" не хочет отрабатывать. Иду в обход mainCRTStartup — не помогает. Вот мой код который грузит сам себя:

#include <windows.h>

#pragma comment(linker, "/ENTRY:entry")

extern "C" int mainCRTStartup(LPVOID var1, DWORD var2, LPVOID var3);
int entry (LPVOID var1, DWORD var2, LPVOID var3)
{
   MessageBoxA(0, "Entry Message", "", MB_OK | MB_ICONINFORMATION);
   return mainCRTStartup(var1, var2, var3);
}

typedef void (*exportFuncPtr)();
extern "C" void __declspec(dllexport) exportFunc()
{
   MessageBoxA(0, "DLL Message", "", MB_OK | MB_ICONINFORMATION);
}

int main (int argc, char *argv[])
{
   MessageBoxA(0, "EXE Message", "", MB_OK | MB_ICONINFORMATION);
   
   exportFuncPtr func;
   HINSTANCE lib = LoadLibrary(argv[0]);
   
   if (NULL != lib) {
      func = (exportFuncPtr)GetProcAddress(lib, "exportFunc");
      if (NULL != func) {
         func();
      }
      
      FreeLibrary(lib);
   }
   
   return 0;
}

VC11
алерты по 1 разу срабатывают, хотя по идее entry второй раз должна вызваться на LoadLibrary. Если внаглую в PE заголовке включить флаг 0x2000, то dllmain таки срабатывает, но сама программа как exe перестает запускаться. Как побороть?
dllmain точка входа
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.