0

我想把自己的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;
            }
4

1 回答 1

0

0x1e7 是 ERROR_INVALID_ADDRESS

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

请参阅 SysInternals 工具 VMmap。

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

于 2019-03-18T06:59:14.093 回答