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;