Страницы памяти, которые содержат инструкции по сборке, будут иметь разрешения на выполнение, но не на запись. Чтобы изменить их, вы должны использовать VirtualProtectEx перед попыткой записи.
Для этого мы можем использовать небольшую оболочку для исправления байтов:
void PatchEx(HANDLE hProcess, char* dst, char* src, int size)
{
DWORD oldprotect;
VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
WriteProcessMemory(hProcess, dst, src, size, NULL);
VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
}
Если выЧтобы применить NOP, вы можете использовать эту функцию:
void NopEx(char* dst, unsigned int size, HANDLE hProcess)
{
char* nopArray = new char[size];
memset(nopArray, 0x90, size);
DWORD oldprotect;
VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
WriteProcessMemory(hProcess, dst, nopArray, size, NULL);
VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
delete[] nopArray;
}