Hallo Leute, ich brauche eure Hilfe.
Versuche nun schon seit einer Woche an die im Betreff genannten Informationen zu kommen. Als Spiel verwende ich momentan "Assault Cube".
Ich habe bereits meine "Baseadress" gefunden mit Pointern und Offsets und kann somit auf die Daten meines Spielers zugreifen.
Dazu habe ich auch die "BaseAdress" des ersten Gegners und verfüge genauso über all seine Daten.
Ich möchte in C++ mittels einer Schleife (wie den sonst) aber alle "PlayerBaseAdressen" abfragen bzw. die Daten jeden Spielers zur Verfügung haben.
Die Anzahl der Spieler kann ich durch eine Adresse problemlos abfragen.
Das Problem: Ich kann die richtige Größe der Spieler-Liste/-Array nicht erkennen. Diese ändern sich bei jedem Neustart des Spiels.
D.h. ich kann zu meiner "Baseadress" nicht einfach den Abstand der Bytes hinzuaddieren, die zuletzt, noch vor dem Neustart, aktuell waren.
Wenn jetzt nicht nur zwei Spieler (Ich & ein Gegner) im Spiel sind, sondern zum Bsp. 32, dann ist die BaseAdresse des "ersten Gegners" nicht die erste, somit weiß ich nicht wo ich anfangen soll.
Frage an euch: wie würdet ihr vorgehen? Was empfehlt ihr mir noch zu versuchen?
Nachtrag:
Wenn ich zum Beispiel einen Breakpoint auf die "decrease health" Funktion setze mit "find out what address this code writes to", dann bekomme ich (nach und nach) alle Health-Adressen der Gegener (auch meine). Das Offset für Health ist "0xf8" wenn ich diesen von jeder Adresse abziehe habe ich somit alle PlayerBaseAdressen.
Das Problem ist es aber das ganze in C++ zu realisieren. Ich weiss nicht wie und ob sowas überhaupt möglich ist. Ich muss durch C++ quasi in das register eines "fremden" Processes eingreifen. Sowas wäre vielleicht noch möglich wenn ich einen Debugger in mein Code einbaue, das wäre aber keine gute Lösung für das Problem.
(Durch den Debuggereinsatz kommen dann, vom Spiel zu Spiel unterschiedlich, nur noch mehr Probleme, die umgangen werden müssen).
Nachtrag 2:
Habe folgendes noch herausgefunden:
Die ersten (1-4) Adressen und die letzten (1-4) Adressen haben immer einen anderen Abstand in Bytes von einander. Aber die mittleren haben immer 430 Bytes.
Nachtrag 3:
Wenn jemand Tutorials in irgendeiner Form kennt, die dieses Thema behandeln dann bitte her damit. Ich finde leider keine.
Nachtrag 4:
Vermutlich habe ich den Abstand falsch gerechnet, ich sollte den Abstand in Bytes vom Pointer (der auf die eine PlayerBase zeigt) zu nächsten Pointer nehmen und nicht den Abstand von PlayerBase zu PlayerBase. Ah und die 430 Bytes stimmen auch nicht immer, ab und zu sind es auch 448 Bytes und manchmal ganz durcheinander.
Irgendwo muss es doch mindestens einen Bereich mit Pointern geben, wo diese mehr oder weniger ordentlich mit gleichmäßigem Abstand zu einander zu sehen sind. ??
So einen Bereich kann ich nicht finden, vor allem finde ich keine Forenbeiträge (auf anderen Foren) mit selben oder ähnlichen Fragen, als wäre das was ich tun möchte für alle einfach und selbstverständlich nur nicht für mich.
Versuche nun schon seit einer Woche an die im Betreff genannten Informationen zu kommen. Als Spiel verwende ich momentan "Assault Cube".
Ich habe bereits meine "Baseadress" gefunden mit Pointern und Offsets und kann somit auf die Daten meines Spielers zugreifen.
Dazu habe ich auch die "BaseAdress" des ersten Gegners und verfüge genauso über all seine Daten.
Ich möchte in C++ mittels einer Schleife (wie den sonst) aber alle "PlayerBaseAdressen" abfragen bzw. die Daten jeden Spielers zur Verfügung haben.
Die Anzahl der Spieler kann ich durch eine Adresse problemlos abfragen.
Das Problem: Ich kann die richtige Größe der Spieler-Liste/-Array nicht erkennen. Diese ändern sich bei jedem Neustart des Spiels.
D.h. ich kann zu meiner "Baseadress" nicht einfach den Abstand der Bytes hinzuaddieren, die zuletzt, noch vor dem Neustart, aktuell waren.
Wenn jetzt nicht nur zwei Spieler (Ich & ein Gegner) im Spiel sind, sondern zum Bsp. 32, dann ist die BaseAdresse des "ersten Gegners" nicht die erste, somit weiß ich nicht wo ich anfangen soll.
Frage an euch: wie würdet ihr vorgehen? Was empfehlt ihr mir noch zu versuchen?
Nachtrag:
Wenn ich zum Beispiel einen Breakpoint auf die "decrease health" Funktion setze mit "find out what address this code writes to", dann bekomme ich (nach und nach) alle Health-Adressen der Gegener (auch meine). Das Offset für Health ist "0xf8" wenn ich diesen von jeder Adresse abziehe habe ich somit alle PlayerBaseAdressen.
Das Problem ist es aber das ganze in C++ zu realisieren. Ich weiss nicht wie und ob sowas überhaupt möglich ist. Ich muss durch C++ quasi in das register eines "fremden" Processes eingreifen. Sowas wäre vielleicht noch möglich wenn ich einen Debugger in mein Code einbaue, das wäre aber keine gute Lösung für das Problem.
(Durch den Debuggereinsatz kommen dann, vom Spiel zu Spiel unterschiedlich, nur noch mehr Probleme, die umgangen werden müssen).
Nachtrag 2:
Habe folgendes noch herausgefunden:
Die ersten (1-4) Adressen und die letzten (1-4) Adressen haben immer einen anderen Abstand in Bytes von einander. Aber die mittleren haben immer 430 Bytes.
Nachtrag 3:
Wenn jemand Tutorials in irgendeiner Form kennt, die dieses Thema behandeln dann bitte her damit. Ich finde leider keine.
Nachtrag 4:
Vermutlich habe ich den Abstand falsch gerechnet, ich sollte den Abstand in Bytes vom Pointer (der auf die eine PlayerBase zeigt) zu nächsten Pointer nehmen und nicht den Abstand von PlayerBase zu PlayerBase. Ah und die 430 Bytes stimmen auch nicht immer, ab und zu sind es auch 448 Bytes und manchmal ganz durcheinander.
Irgendwo muss es doch mindestens einen Bereich mit Pointern geben, wo diese mehr oder weniger ordentlich mit gleichmäßigem Abstand zu einander zu sehen sind. ??
So einen Bereich kann ich nicht finden, vor allem finde ich keine Forenbeiträge (auf anderen Foren) mit selben oder ähnlichen Fragen, als wäre das was ich tun möchte für alle einfach und selbstverständlich nur nicht für mich.