Я пытаюсь отлаживать виртуальную память процесса, что требует от меня поискать его виртуальную память для серии известных и постоянных байтов, однако из-за смещений, динамически изменяющихся все время I придется перебирать все адресное пространство, чтобы найти нужные мне байты. В настоящее время у меня есть эти петли, которые работают, однако они занимают очень много времени, чтобы запустить в среднем 15-30 секунд.Оптимизация для цикла по большому адресному пространству
BYTE target[15] = { 0xFG, 0x93, 0x32, 0x1A, 0xB0, 0x9F, 0xC7, 0x00, 0x11, 0x00,
0x3F, 0x01, 0x00, 0x00, 0x00 };
BYTE buff[15];
int count = 0;
DWORD target_addr = 0;
for (DWORD i = 0x401000; i <= 0x2000000; i++)
{
count = 0;
ReadProcessMemory(procName, (LPCVOID)i, (LPVOID)buff, 15, &real);
for (int j = 0; j < 15; j++)
{
if (target[j] == buff[j])
count++;
else
break;
}
if (count == 15)
{
target_addr = i;
break;
}
}
Как можно ускорить процесс?
Это мой первый опыт использования низкоуровневых функций памяти и API отладки Windows, поэтому я вполне мог бы упустить гораздо лучший способ сделать это.
ReadProcessMemory работает медленно, вы пробовали читать более 15 байт за раз? Вы также можете использовать скользящее окно и сравнивать слова вместо байтов. – CascadeCoder
Вам нужен гораздо больший буфер, чем 15 байт, или чтобы mmap память процесса в вашу собственную. Кроме того, используйте 'memmem()' для поиска. Наконец, вы не проверяете возможность перекрытия блоков. –