2017-07-17 5 views
-1

Ich habe ein Problem mit der Readprocessmemory-Funktion in C++. Tatsächlich ist die Funktion selbst funktioniert gut, aber wenn es um größere Adressen kommt (zum Beispiel, wenn ich ungsigned __int64 anstelle von DWORD seit DWORD für die Adresse zu klein ist) die Funktion gibt mir eine falsche Zeiger-Adresse. Hier ist der relevante Code:Readprocessmemory funktionieren nicht richtig

DWORD tempAddress; 
unsigned __int64 potentialBasePointerAddress = 0x13F8A0000 + 0x18606B8; //I used unsigned __int64 since 0x13F8A0000 is too large for DWORD 

if (ReadProcessMemory(hProcess, (LPVOID)potentialBasePointerAddress, &tempAddress, sizeof(tempAddress), NULL)) 
{ 
    cout << tempAddress << endl; 
} 
//in this specific case the tempAddress is 1BD5679 (or 29185657) but actually it should be 3E7D4FE0 (see (*)) 

(*)Cheat Engine Result

Wenn ich DWORD tempAddress ändern; zu vorzeichenlos __int64 tempAddress; Die tempAddress ist 1953A4A0002C88A5 (oder 18249832811198240377)

Ich habe wirklich keine Ahnung, wie Sie dieses Problem lösen. Ich bin ziemlich sicher, dass es eine Möglichkeit, zu handhaben Basisadressen größer als DWORD Größe, aber ich bin zu dumm, um herauszufinden, ...

Ich bin dankbar für jede Hilfe!

Antwort

0

kompilieren Sie das Programm als 64-Bit-Binär? Wenn Sie es als 32-Bit dann die Besetzung zu LPVOID kürzt tatsächlich Ihre Zeiger auf 32-Bit-Wert kompilieren und so lesen Sie einfach die falsche Adresse.

Verwandte Themen