0

我有一个外部 DLL 可以使用。我尝试加载 DLLLoadLibrary并通过调用来获取函数,GetProcAddress但每次调试程序时,我都会遇到异常,我可以通过 windows 忽略它,但最后我的 main 方法也会抛出异常,并且永远不会以调用异常结束:

typedef int(__cdecl* GETRANDOMNUM)(unsigned char*);

int main(int argc, char *argv[])
{
    HMODULE hinstLib = LoadLibrary(TEXT("some.dll"));
    GETRANDOMNUM getrandomnum = (GETRANDOMNUM)GetProcAddress(hinstLib, "getrandomnum");
    
    int state = 0;
    //getrandomnum
    if (ic_getrandomnum != NULL)
    {
        unsigned char password[8] = { 0 };
        state = (getrandomnum)(password);
    }
    
    if(!FreeLibrary(hinstLib))
        return -1;

    return state;
}

的定义"getrandomnum"是:

#ifdef EXPORT
#define IM_OR_EXPORT    extern "C" __declspec(dllexport)
#else
#ifdef USE_IMPORT_LIBRARY
#define IM_OR_EXPORT    extern "C" __declspec(dllimport)
#else
...
#define CALLTYPE  __stdcall
...
IM_OR_EXPORT int CALLTYPE getrandomnum(unsigned char* randomnum);

例外情况是:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

和:

Ausnahme ausgelöst bei 0x0044C828 in Cpp.exe: 0xC0000005: Zugriffsverletzung beim Ausführen an Position 0x0044C828.

和:

Ausnahmefehler bei 0x00442F59 in Cpp.exe: Vom Stapelcookie-Instrumentationscode wurde ein stapelbasierter Pufferüberlauf erkannt.

这个例外永远重复。

有人可以帮助我吗?

4

0 回答 0