我有一个DLL(WinDll.dll)导出一个名为'SampleFunction'的函数。 DLL与正在执行的应用程序位于同一文件夹中。现在,当我尝试按名称获取导出函数的地址时,它会给出错误127
,但是,当我使用函数的序数值执行相同操作时,它可以正常工作。任何想法如何以及为什么会发生这种情况?以下是加载并尝试使用导出函数的代码。此外,我还附加了IDA Proo的剪辑,其中显示了WindDll.dll的导出函数。
#include <windows.h>
#include <stdio.h>
typedef int (WINAPI *ProcP)(HINSTANCE, HINSTANCE, LPSTR, int);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HINSTANCE hinstlib;
LPSTR lpBuffer = (LPSTR)malloc(256*2);
GetCurrentDirectory(256,lpBuffer);
ProcP procAddress = NULL;
strcat(lpBuffer,"\\WinDll.dll");
hinstlib = LoadLibrary(TEXT(lpBuffer));
if(hinstlib == NULL){
MessageBox(NULL,lpBuffer, "Bull", MB_OK);
exit(0);
}
else{
procAddress = (ProcP)GetProcAddress(hinstlib,"SampleFunction"); // <-- Problem
if(procAddress != NULL){
PostMessage(NULL, WM_RBUTTONDOWN, MK_RBUTTON, 0);
}
else{
MessageBox(NULL, "Invalid ProcAddress", "Bull", MB_OK);
}
}
return 0;
}
答案 0 :(得分:3)
SampleFunction
似乎是用_stdcall调用约定声明的。因此,必须传递给GetProcAddress
的函数的名称是“_SampleFunction @ 16”,如dumpbin命令所示。
有关为_stdcall
,_cdecl
和Calling convetion
调用约定搜索的详细信息。