Pointer Verständnisfrage

08/29/2013 15:08 ehauser#1
Hallo ich habe eine Frage zu Pointern.
Wenn ein Spiel mit new auf dem Heap Speicher für eine Struktur anfordert, die Informationen über den Spieler enthält, dann liegt der Pointer auf diese Struktur wahrscheinlich auf dem Stack.
Aber die Adresse des Stacks ändert sich bei PC-Neustart (bei ASLR aktiv).
Wie finde ich also den Pointer, der auf die Struktur auf dem Heap zeigt?
08/29/2013 17:14 Nanoxx™#2
[Only registered and activated users can see links. Click Here To Register...]

Deine Idee: Erstmal zu Epvp
08/29/2013 21:30 ehauser#3
Ich hab gegoogelt aber nur Tutorials gefunden WIE man Pointer findet, aber nicht WARUM das funktioniert.
08/30/2013 02:18 BanishTheShadows#4
Quote:
Originally Posted by GERMANY132816 View Post
[Only registered and activated users can see links. Click Here To Register...]

Deine Idee: Erstmal zu Epvp
wtf, das ist doch das Coding forum, genau hier sollte man solche fragen auch stellen können.
08/30/2013 02:55 Padmak#5
Du kannst einen BP on Access auf die Struct legen und dann schauen, von wo aus die Structs ausgelesen/beschrieben werden

Dann kannst du von dort aus weitersehen

Padmak
08/31/2013 12:39 MrSm!th#6
Ihr verfehlt die Frage. Er will wissen, wie er einen unveränderlichen Pointerpfad auf die Struktur bekommt, wenn eine Pointervariable nunmal nicht global ist, sondern innerhalb einer Funktion auf dem Stack liegt.

Dazu sei Folgendes gesagt:
Ein Objekt macht nur Sinn, wenn darauf auch irgendwer zeigt, also wird es wohl kaum so sein, dass die Funktion verlassen wird, das Objekt bleibt auf dem Heap und der Pointer verlässt seinen Gültigkeitsbereich.
Sicherlich wird der Pointer in dem Fall irgendwie nach außen gereicht. Ein Hook der Funktion würde Klarheit schaffen.
Sollte der Pointer tatsächlich nur innerhalb der Funktion gültig sein, weil das Objekt beispielsweise temporär ist, dann wirst du ohnehin nicht um einen Hook herum kommen, damit du nicht auf den Pointer zugreifst, wenn das Objekt gar nicht existiert und es auch keinen Sinn macht.

Sollte es sich um eine Funktion mit längerer Ausführung handeln (Extrembeispiel: Main), dann ist der Pointer auch entsprechend lange gültig, sofern er nicht zwischendurch aktiv zerstört wird. In dem Fall wäre es auch wohl auch möglich, auf den Pointer einen sinnvollen Basepointer zu bekommen. Ich bin mir gerade nicht ganz sicher, aber gibt es nicht eine API / einen Eintrag im PEB/TEB, der auf den Anfang des Stacks zeigt? Die Position innerhalb des Stacks sollte ja konstant sein. Damit hättest du dann deinen Basepointer.

So oder so, ein Hook bleibt das Mittel der Wahl. Da wäre btw auch das Register fs eine Möglichkeit.