VirtualAlloc失败

时间:2019-03-12 10:18:27

标签: virtualalloc

我想将自己的ImageBase设置为0x2000000,然后将另一个EXE程序读取到其ImageBase中,当然通常是0x400000,但是当我使用VirtualAlloc申请空间时,它总是失败,GetLastError为0x1e7(487),当然,我也尝试仅加载ntdll.dll程序,同样失败,该如何解决?

下面的部分代码:

 DWORD dwImageBase = pNtHeader->OptionalHeader.ImageBase;

            LPVOID lpImageBuff = ::VirtualAlloc((PVOID)(dwImageBase), pNtHeader->OptionalHeader.SizeOfImage, MEM_RESERVE, PAGE_READWRITE);
            if (NULL == lpImageBuff)
            {
                ::MessageBox(NULL,_T("Application for ImageBase failed!!!"),_T("ERROR"),MB_ICONSTOP | MB_OK); 
                return;
            }

1 个答案:

答案 0 :(得分:0)

0x1e7是ERROR_INVALID_ADDRESS

您尝试保留内存的地址已被使用-您自己的图像。

请参阅SysInternals工具VMmap。

将VirtualAlloc用于MEM_RESERVE或MEM_RESERVE的常用方法| MEM_COMMIT,将第一个参数使用0。这使API可以选择虚拟地址空间的空闲区域。