Pointer auf eine Speicheradresse
-
Hallo!
Als kleine Übung zu den Pointern wollte ich ein Programm schreiben, dass von einem Spiel zB die Lebenspunktanzahl anzeigt. Da es in meinem Buch nur Beispiele für Pointer auf Variablen gibt, steh ich mit Pointern die auf Werte von Speicheradressen zeigen ziemlich auf dem Trockenen. Vielleicht ist jemand so nett und kann mir ein Beispiel für die Syntax geben. Da ich noch ziemlich unsicher bei C++ bin, würden mir ein paar Kommentare dazu sehr weiter helfen. Danke

-
Hi,
dafür musst du den Pointer casten, um ihn auf eine bestimmte Speicheradresse zeigen zu lassen:
int *pointer; pointer = reinterpret_cast <int*> (0x02CFF); std::cout<<*pointer;...allerdings wird dir dein Programm bei so einem Versuch sofort abstürzen, da es nicht gestattet ist, auf fremde Speicherbereiche zuzugreifen. Windows teilt jedem Programm einen virtuellen Adressraum zu, und kein anderes hat auf diesen Speicher von aussen Zugriff (es sei denn, man verwendet spezielle API Funktionen wie z.B. ReadProcessMemory). Beim Versuch, eine fremde Speicheradresse auszulesen (bzw. zu beschreiben), beschwert sich Windows, und es gibt eine "Access Violation", Speicherzugriffsverletzung. Hier musst du notgedrungen auf die bereits erwähnte API Funktion von Windows zugreifen.
MfG mikey.
-
Danke erstmal für die Erklärung. Folgendes Beispiel war auf der Seite:
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead
);1. Ich brauche also ein Handle für den Prozess, dessen Speicher ich auslesen möchte. Benötige ich dafür die Funktion GetWindowThreadProcessId? Leider weiss ich nicht genau, was ein Handle ist (soweit ich weiss eine ID) geschweige denn, wie man sie auslesen kann.
2. Ist das der pointer, der auf die Speicheradresse zeigt?
3. Habe ich jetzt als einen pointer verstanden, der den Rückgabewert (also in meinem Fall die Lebenspunkte) bekommt.
4. Muss ich da die Größe des Wertes den ich bekomme angeben? (zB bei int wars glaube ich 4 byte)
5. wie 3, nur dass der Pointer den Wert für die Größe von Punkt 4.) erhält.
-
Ohne hier arrogant wirken zu wollen: Du bist für das Programm, welches du schreiben möchtest noch zu unerfahren. Verschiebs auf später

MfG SideWinder
-
SideWinder hat Recht, das Thema ist für den Anfang noch etwas schwer zu verstehen, lass dir noch etwas Zeit damit

-
Das heisst, meine Vorstellungen waren grob falsch?

-
Nein, aber die Fragen zu banal, was darauf hindeutet, dass du mit den Grundlagen noch nicht vertraut bist.
-
Joa, das stimmt. Ich stecke noch in den Kinderschuhen, werde mein Problem vertagen müssen
Danke für die Mithilfe!