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。我将把我的项目转移到另一台机器上。