Memory-Such-Funktion, habe keinen Zugriff auf die Adresse
-
Ich möchte den Speicherbereich zwischen 0x080000B0 und 0x08FF00B0 nach einem String
absuchen, aber ich kann die Adresse nicht vergrößernAber seht selbst:
LPVOID current = (LPVOID)0x080000B0; bret=ReadProcessMemory(hopen, current, &data, 5, 0); current++;LPVOID current = (LPVOID)0x080000B0; bret=ReadProcessMemory(hopen, current, &data, 5, 0); current += (LPVOID)0x00010000;Der Compiler sagt
error C2036: 'LPVOID' : unknown sizeAber es hat ja ne size, wie spreche ich denn den Pointer selbst an?
Danke schonmal

-
Listing schrieb:
error C2036: 'LPVOID' : unknown sizeAber es hat ja ne size, wie spreche ich denn den Pointer selbst an?
Nein. 'LPVOID' ist 'void*' und das hat eben keine Größe und kann daher auch nicht in Zeigerarithmetik verwendet werden. Verwende 'BYTE*', um in Einerschritten hochzuzählen ('BYTE' sollte unter Windows die kleinste adressierbare Einheit darstellen).
-
Konrad Rudolph schrieb:
Listing schrieb:
error C2036: 'LPVOID' : unknown sizeAber es hat ja ne size, wie spreche ich denn den Pointer selbst an?
Nein. 'LPVOID' ist 'void*' und das hat eben keine Größe und kann daher auch nicht in Zeigerarithmetik verwendet werden. Verwende 'BYTE*', um in Einerschritten hochzuzählen ('BYTE' sollte unter Windows die kleinste adressierbare Einheit darstellen).
Wie soll das denn Funktionieren?
Die Funktion "ReadMemory" verlangt LPVOID als Adressen-Paramenter,
könttest du bitte ein Beispiel machen, damit ich dir folgen kann?
Danke schonmal für deine Hilfe
-
Listing schrieb:
Wie soll das denn Funktionieren?
Die Funktion "ReadMemory" verlangt LPVOID als Adressen-ParamenterDas ist doch egal, Du brauchst doch eh ein 'reinterpret_cast', da kannst Du zwischen den Zeigern hin- und hercasten, wie Du lustig bist. Und nach 'void*' kann man eh implizit casten:
BYTE* current = reinterpret_cast<BYTE*>(0x080000B0); bret = ReadProcessMemory(hopen, current, &data, 5, 0); current++;
-
Das klappt nicht so ganz:
while(true) { //LPVOID current = (LPVOID)0x08??00B0; BYTE* current = reinterpret_cast<BYTE*>(0x00450000); bret=ReadProcessMemory(hopen, current, &data, 10, 0); current++; cout << "At the offset: " << current << hex << " the Data is: "; cout << hex << data << endl; if(current == reinterpret_cast<BYTE*>(0x00450100)) { bret=CloseHandle(hopen); return 0; } }ergibt eine Endlosschleife...
Ausgabe:
At the offset: the Data is: 0 At the offset: the Data is: 0 At the offset: the Data is: 0 At the offset: the Data is: 0 At the offset: the Data is: 0 At the offset: the Data is: 0 At the offset: the Data is: 0 ..............
-
Listing schrieb:
ergibt eine Endlosschleife...
Ja, Du setzt ja auch in jedem Schleifendurchlauf 'current' auf seinen Startwert zurück ...
BYTE* current = reinterpret_cast<BYTE*>(0x00450000); while (current != reinterpret_cast<BYTE*>(0x00450100)) { bret = ReadProcessMemory(hopen, current++, &data, 10, 0); cout << hex << data << endl; } bret=CloseHandle(hopen);/Edit: um Dir die Adresse von 'current' ausgeben zu lasse:
cout << static_cast<void*>(current) << endl;
-
Konrad Rudolph schrieb:
Listing schrieb:
ergibt eine Endlosschleife...
Ja, Du setzt ja auch in jedem Schleifendurchlauf 'current' auf seinen Startwert zurück ...
BYTE* current = reinterpret_cast<BYTE*>(0x00450000); while (current != reinterpret_cast<BYTE*>(0x00450100)) { bret = ReadProcessMemory(hopen, current++, &data, 10, 0); cout << hex << data << endl; } bret=CloseHandle(hopen);Sorry, das ist ein Fehler der mir , manchmal passiert

Jetzt geht esDankeschön
