我正在尝试使用 C++ 进行一些 DLL 注入。但是,我无法清理我的代码,因为 VirtualFreeEx 总是会失败。
这是我如何做的一个例子
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;