Weil du die zwischenschritte nicht machst.
IMO!
PHP Code:
float posx = *(float*)(0x123456);
// das funktioniert!
Da liest du ja nur eine adresse aus. ( btw. nette schreibweise, hab ich das erste mal in einem script von L.Spiro gesehen ^^ )
Nun willst du den Pointer auslesen.
Du liest den Speicher bei der Adresse 0x0123 aus. schreibst es in a.
Dann liest du den Speicher bei der Adresse [0x123]+0x12 aus. ( [0x123] heißt inhalt von 0x123) schreibst es wieder in a.
Bei der Version da unten
PHP Code:
float posx = *(float*)(((((((0x123456) + 0x12) + 0x23) +0x34)+0x56)+target*78)+0x90);
Lässt du die einzelnen Schritte des auslesens weg.
So wie ich das sehe, liest du dort die Adresse (((((((0x123456) + 0x12) + 0x23) +0x34)+0x56)+target*78)+0x90) aus.
Als ganze.
Das Problem ist, du brauchst immer den Inhalt von 0x123456 und den folgenden um weiter machen zu können.
Mit dieser Schreibweise hast du aber die Adresse : 0x1235A5+target*78.
Wenn du das jetzt per ReadPMem auslesen würdest, würde er dir die Werte einfach zusammenrechnen.
Du müsstest dir eine extra ReadPointer Funktion schreiben imo. Wo du
PHP Code:
float posx = *(float*)(((((((0x123456) + 0x12) + 0x23) +0x34)+0x56)+target*78)+0x90);
Aufteilst und dann jedes einzelne glied davon ausliest.
EDIT:
Habs gefunden, © L.Spiro
PHP Code:
UINT_PTR Deref( UINT_PTR uiPtr ) {
::ReadProcessMemory( g_hProcess, (LPCVOID)uiPtr, &uiPtr, sizeof( uiPtr ), NULL );
return uiPtr;
}
VOID WriteFloat( UINT_PTR uiBase, DWORD dwOffsets[3], FLOAT fValue ) {
for ( DWORD I = 0; I < 3; ++I ) {
uiBase = Deref( uiBase );
uiBase += dwOffsets[I];
}
(*(FLOAT *)uiBase) = fValue;
}
Die Offsets packst du dann in deOffsets:
PHP Code:
DWORD dwOffsets[3] = { 0x00, 0x00, 0x00 };
WriteFloat(0x00400000, dwOffsets, 1000);