Лучше всего использовать VirtualQueryEx для l oop через всю допустимую память и избегать вызова ReadProcessMemory для недействительной памяти
while (VirtualQueryEx(hProc, addr, &mbi, sizeof(mbi)))
{
if (mbi.State == MEM_COMMIT && mbi.Protect != PAGE_NOACCESS)
{
delete[] buffer;
buffer = new char[mbi.RegionSize];
ReadProcessMemory(hProc, mbi.BaseAddress, buffer, mbi.RegionSize, &bytesRead);
for (int j = 0; j < bytesRead; j++)
{
if ((int)buffer[j] == 220)
{
printf("found value %d at 0x%x.\n", someValue, mbi.BaseAddress + j);
}
}
}
}
addr += mbi.RegionSize;
}
return match;
Имейте в виду, что это возвратит области памяти, где части двух переменных при объединении имеют те же биты, что и ваше значение в целочисленном представлении. Это означает, что вы можете получить ложные срабатывания