Das Problem wird doch sein dass die Adresse eines Zustandes (z.B. HP, Munition) nicht relativ zur Basiadresse des Moduls berechnet werden kann sondern ein Pointer darauf zeigt (z.B. Speicher auf dem Heap).
Im Spiel sieht das dann so aus:
Delphi-Quellcode:
mov eax, $00401234 // --> absolut, kann relativ zum Modulbase berechnet werden
mov ebx, [eax] // Pointer vom reserviertem Speicherbereich lesen (das was in ebx steht ist dann das was du haben willst und für ReadProcessMemory brauchst)
mov ecx, [ebx] // Wert lesen, z.B. HP
Was du also machen musst, ist die absolute Adresse rauszufinden, und dann 2x ReadProcessMemory auszuführen um den Wert zu erhalten.
1x $00401234 lesen -> entspricht [eax] bzw. [$00401234]
1x von der Adresse lesen die dort Stand -> entspricht [ebx]
Wenn du jetzt rückwärts versucht daran zu kommen, wirst du nur ebx erhalten. Und der Wert ändern sich bei dir logischerweise immer.
Wenn du das Spiel debuggen kannst, ist es am einfachsten einen Hardware-Read-Breakpoint zu setzen bzw. ein Memory Breakpoint OnAccess auf den Speicherbereich von ebx (den du ermittelt hast, und der sicht immer ändert).
Dann bleibt der Debugger dort stehen wo auf [ebx] zugegriffen wird. Dann musst du halt den Code davor analysieren bis du auf einen festen Speicherbereich ($00401234) stößt und danach über mehrmaliges ReadProcessMemory den Wert auslesen.