Как реализовать функцию rundll2-callable? - PullRequest
0 голосов
/ 04 ноября 2010

Я пытаюсь написать exe-файл, который также экспортирует функции, которые можно вызывать с помощью rundll32.Возможно ли это, и если да, то почему это не работает так?

Я строго следовал советам Microsoft по этому поводу .

#define RUNDLL32(func) extern "C" __declspec(dllexport) void CALLBACK func(HWND hWnd, HINSTANCE hInst, LPSTR lpszCmdLine, int nCmdShow)

RUNDLL32(MyFunc)
{
  MessageBox(0, 0, 0, 0);
}

Но когда вызывается с

rundll32 myprog.exe,_MyFunc@16

происходит сбой rundll32 / запускается DEP.

1 Ответ

2 голосов
/ 04 ноября 2010

Rundll32.exe использует LoadLibrary () для загрузки исполняемого образа.Это вряд ли будет хорошо работать для EXE, он не ожидает загрузки по адресу, который не является его значением по умолчанию.Что гарантированно произойдет, rundll32.exe уже занимает этот адрес по умолчанию.Не уверен, что вы могли бы возиться с компоновщиком, чтобы он не пропускал записи о перемещении.

Но не беспокойтесь об этом подходе, просто создайте DLL вместо EXE.И передать реальные аргументы MessageBox ().И да, используйте файл .def для переименования экспортируемой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...