Nach jedem Vorkommen einer Zeichenfolge im Speicher eines anderen Prozesses suchen

Ich versuche, jedes Vorkommen einer bestimmten Zeichenfolge abzurufen, z. B. "ExampleString". Was ich derzeit habe, findet das erste Vorkommen der Zeichenfolge im Speicher eines Prozesses, aber die nachfolgenden Zeichenfolgen werden nicht gefunden. Ich habe versucht, ein @ zu verwendvector, um alle Ergebnisse zu speichern, es wird jedoch nur noch ein Ergebnis gefunden.

Below ist die Funktion, die ich verwende, um den Vektor der Speicherorte zu erhalten. Wieder funktioniert es für den ersten Ort.

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;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage