Поиск каждого вхождения строки в памяти другого процесса
Я пытаюсь получить каждое вхождение определенной строки, например, «ExampleString». То, что у меня сейчас есть, найдет первое вхождение строки в памяти процесса, но не найдет последующие строки. Я пытался использоватьvector
сохранить все результаты, но он находит только один результат.
Ниже приведена функция, которую я использую для получения вектора местоположений памяти. Опять же, это работает для первого местоположения.
std::vector<char*> GetAddressOfData(DWORD pid, const char *data, size_t len) {
HANDLE process = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION, FALSE, pid);
std::vector<char*> locations;
int cur = 0;
if(process){
SYSTEM_INFO si;
GetSystemInfo(&si);
MEMORY_BASIC_INFORMATION info;
std::vector<char> chunk;
char* p = 0;
while(p < si.lpMaximumApplicationAddress){
if(VirtualQueryEx(process, p, &info, sizeof(info)) == sizeof(info)){
p = (char*)info.BaseAddress;
chunk.resize(info.RegionSize);
SIZE_T bytesRead;
if(ReadProcessMemory(process, p, &chunk[0], info.RegionSize, &bytesRead)){
for(size_t i = 0; i < (bytesRead - len); ++i){
if(memcmp(data, &chunk[i], len) == 0) {
cur++;
locations.resize(cur);
locations[cur-1] = (char*)p + i;
std::cout << "Found*: " << (void*)locations[cur-1] << "\n";
}
}
}
p += info.RegionSize;
}
}
}
return locations;
}