Ошибка VirtualAlloc - PullRequest
       38

Ошибка VirtualAlloc

0 голосов
/ 12 марта 2019

Я хочу установить свою собственную 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 голосов
/ 18 марта 2019

0x1e7 - ERROR_INVALID_ADDRESS

Адрес, по которому вы пытаетесь зарезервировать память, уже используется - вашим собственным изображением.

См. Инструмент SysInternals VMmap.

Обычный способ использовать VirtualAlloc для MEM_RESERVE или MEM_RESERVE | MEM_COMMIT, должен использовать 0 в качестве первого аргумента. Это позволяет API выбирать свободную область виртуального адресного пространства.

...