Das liegt vermutlich daran, dass "Threadstack" gar nicht das Hauptmodul ist, sondern das, wonach es sich anhört: der Stack eines Threads. Oder heißt das Target zufällig "Threadstack.exe" bzw. "Threadstack0.exe"? Das kommt daher, dass das, was du suchst im Target eine lokale Variable ist, und damit auf dem Stack liegt, was in der Praxis im Gamehacking unüblich ist und selten bis gar nicht vorkommt (ich hab's jedenfalls nie gesehen oder gehört).
Wenn du das Problem trotzdem lösen möchtest, musst du schauen, zu welchem Thread der Stack gehört, ihn zur Laufzeit während einer Threaditeration identifizieren, schauen, an welchem Punkt er sich gerade befindet (== welche instruktion als nächstes ausgeführt wird: EIP-/RIP-Register) und anhand dessen über sein ESP-/RSP-Register +- einem Offset (was abhängig von EIP/RIP ist, da Code im Target ja mit pushs und pops oder direkt ESP/RSP verändern kann) zur gewünschten Adresse kommen.
Weiterhin zu beachten ist, dass die lokale Variable natürlich invalid wird, wenn die Funktion, zu der sie gehört, returnt. Theoretisch ist sie danach zwar noch im Speicher, kann aber von z.B. der nächsten Funktion überschrieben werden. Um das zu verifizieren, bietet es sich wieder an zu schauen, ob EIP/RIP (und damit der Thread zur Zeit) in der gewünschten Funktion liegt.
Ich hoffe, dass ich helfen konnte
Jeoni
Btw. hoffe ich, dass dir bewusst ist, dass
Code:
DWORD* x = (DWORD*)y + z; // z is an integral type, like -0x150
wertmäßig zu soetwas führt: x = y + z*sizeof(DWORD)
Entsprechend zeigt x nicht auf z Bytes über y, sondern auf z*sizeof(DWORD) Bytes über y.
Für mehr Details dazu, such nach "Pointerarithmetik".