Точка входа в 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 точка входа
Re: Точка входа в exe библиотеку
От: rus blood Россия  
Дата: 20.03.13 08:44
Оценка:
Здравствуйте, segray, Вы писали:

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


Глобальный статический код тоже не отработает.

S>Вот мой код который грузит сам себя:

S>Как побороть?

Не делать так.
В чем цель-то?
Имею скафандр — готов путешествовать!
Re: Точка входа в exe библиотеку
От: Abyx Россия  
Дата: 20.03.13 08:50
Оценка:
Здравствуйте, segray, Вы писали:

S>Если внаглую в PE заголовке включить флаг 0x2000, то dllmain таки срабатывает, но сама программа как exe перестает запускаться. Как побороть?

никак не побороть. этот флаг для того и нужен, чтоб LoadLibrary не грузила exe, а CreateProcess не запускал dll.
пишите свой загрузчик.
In Zen We Trust
Re: Точка входа в exe библиотеку
От: Mr.Delphist  
Дата: 20.03.13 08:55
Оценка: 1 (1)
Здравствуйте, segray, Вы писали:

S>Всем привет.


S>Я пробую использовать exe программу как динамически загружаемую библиотеку.


1) Оформить этот dll-exe как out-proc COM-сервер и не париться
2) Вытащить нужный функционал в DLL и юзать из обоих EXE. И тоже не париться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.