VirtualFreeEx始终返回0,错误\无效\参数作为最后一个错误 我尝试用C++做一些DLL注入。但是,我无法清理代码,因为VirtualFreeEx总是会失败

VirtualFreeEx始终返回0,错误\无效\参数作为最后一个错误 我尝试用C++做一些DLL注入。但是,我无法清理代码,因为VirtualFreeEx总是会失败,c++,winapi,C++,Winapi,下面是一个我是如何做到这一点的例子 void *stubBase = VirtualAllocEx( hProcess, NULL, MakeDelta(SIZE_T, DllCallStubEnd, DllCall_Stub), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if( !stubBase ) { VirtualF

下面是一个我是如何做到这一点的例子

void *stubBase = VirtualAllocEx(
        hProcess,
        NULL,
        MakeDelta(SIZE_T, DllCallStubEnd, DllCall_Stub),
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE);

    if( !stubBase )
    {
        VirtualFreeEx(hProcess, moduleBase, 0, MEM_RELEASE);
        delete[] dllBin;
        return false;
    }
在本例中,moduleBase指向一个有效地址,并且成功。然而,自由总是失败的。另外,在另一种情况下,我希望释放某个内存位置(在恢复所有进程之后)。我将调用VirtualFreeEx(hProcess,ImageBase,0,MEM_RELEASE),它也将失败,并出现相同的错误

这是我打字前的图像库:

unsigned long ImageBase = ntHd->OptionalHeader.ImageBase;

moduleBase与stubBase的关系如何?如果您将大小0传递给VirtualFreeEx,而不传递最初从VirtualAllocEx返回的基址,则VirtualFreeEx将失败。模块基址是先前分配的。然而,我似乎发现了我的问题。我的防病毒软件已经钩住了VirtualAllocEx,出于某种原因,它总是让它返回false。我将把我的项目转移到另一台机器上。