我正在尝试编写一个也可以导出可以用rundll32调用的函数的exe。这是可能的,如果是这样,为什么它不能像这样工作?
我密切关注Microsoft's advice on this。
#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开始。
答案 0 :(得分:2)
Rundll32.exe使用LoadLibrary()加载可执行映像。这对于EXE来说不太可能有效,它不会期望加载到不是它的默认地址。保证会发生这种情况,rundll32.exe已经占用了那个默认地址。不确定是否可以修改链接器,以便它不会省略重定位记录。
但是不要理会这种方法,只需创建一个DLL而不是EXE。并将实际参数传递给MessageBox()。并且,是的,使用.def文件重命名导出的函数。