【发布时间】:2020-11-06 19:14:49
【问题描述】:
我阅读了 MSDN 文档,查看了其他示例,也向其他人寻求帮助。到目前为止还没有人找到解决办法,所以 StackOverflow 是我最后的希望。
目前我的目标是从 DLL 调用函数。下面给出的示例使用位于user32.dll 中的简单窗口MessageBox() 函数。这已经在之前完成了,但是当我尝试在 C 中执行此操作时,它会在调用 GetProcAddress() 时崩溃。
HMODULE hLib;
func_msgBox msgBox;
hLib = LoadLibrary("C:\\WINDOWS\\system32\\user32.dll");
if (hLib != NULL) {
printf("[+] - Loaded our library");
msgBox = (func_msgBox)GetProcAddress(hLib, "MessageBox");
if (msgBox != NULL) {
printf("[+] - Recieved our process address");
(func_msgBox)(NULL, "test", "test", 0);
printf("[+] - Called our function");
}
}
printf("Error: %s", GetLastError());
FreeLibrary(hLib);
【问题讨论】:
-
已经有了这是针对 C 而不是针对 C++ 但是我已经将代码重新调整为针对 C 但是它只是崩溃了,这就是我寻求帮助的原因。
-
您是如何确定崩溃的确切位置的?那些
printf电话甚至没有换行符,所以你不能依赖它们。您是否附加了调试器并单步执行?这是最合适的行动。您还没有展示如何声明func_msgBox,或者您使用的是窄字符集还是宽字符集,或者您的应用程序是编译为 64 位还是 32 位(很重要,因为您正在加载 64 位 DLL除非您在 32 位操作系统上运行它)。此外,您的电话(func_msgBox)(NULL, "test", "test", 0);是错误的,不应编译。你的意思是(msgBox)(...)? -
@brainlet 您阅读那里的答案了吗?无论使用何种语言,您的
GetProcAddress调用都将返回NULL。 -
请注意,
MessageBox不是函数。看起来你想要MessageBoxA。