ReadProcessMemory PROBLEM ! :(
-
hey ich hab eine problem mit readprocessmemory
unzwar hab ich einen script der mir den HP wert aus einem spiel auslesen soll , diesen habe ich anhand eines videos bei youtube erstellt
das problem ist aber das dort immer -8XXXXXXXX rauskommt meine pointer und offsets die ich dadrine habe sind aufjedenfall richtig nur woran liegt es dan :o
vllt kann mir ja jemand helfen#include <iostream> #include <windows.h> using namespace std; //--------------------------------- //Offsets #define PLAYERBASE_PTR 0x6EFFFC #define PLAYERBASE_OFFSET 0x5F0 #define PLAYER_HEALTH 0x194 //--------------------------------- //Andere Sachen die wir noch brauchen HWND hwnd; HANDLE handle; DWORD ID; LPCTSTR lpWindowName = L"4Story_GSP"; bool SetDebugPrivileges(); int main(){ int puffer = 0; DWORD rw=0; //--------- Injection ------------ // Suche Prozess while(!hwnd){ cout << "Suche nach dem Prozess und injecte..." << endl; hwnd = FindWindow(NULL, lpWindowName); if(!hwnd) printf("\r"); Sleep(100); } // Prozess-ID besorgen GetWindowThreadProcessId(hwnd, &ID); //Rechte zum auslesen besorgen SetDebugPrivileges(); // Prozess �ffnen mit allen Rechten handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID); //--------------------------------- /* An diesem Punkt beginnen wir nun mit dem eigentlichem auslesen aus dem Hauptspeicher Ich demonstriere das jetzt mal an der jeweiligen aktuellen HP Zahl */ // Struct erstellen int hp; int hp_max; int hp_puff = 0; int mana_puff = 0; DWORD baseptr; DWORD pptr; while(hwnd) { //Hier haben wir nun eine Schleife, die jede Sekunde die HP Zahl �berpr�ft // Adresse auslesen ReadProcessMemory(handle, (void*)PLAYERBASE_PTR, &baseptr, sizeof(baseptr), &rw); // Player Addy auslesen ReadProcessMemory(handle, (void*)baseptr, &pptr, sizeof(pptr), &rw); // Aktuelle und max. HP auslesen auslesen ReadProcessMemory(handle, (void*)(pptr+PLAYER_HEALTH), &hp, sizeof(hp), &rw); ReadProcessMemory(handle, (void*)(pptr+PLAYER_HEALTH), &hp_max, sizeof(hp_max), &rw); // HP ausgeben if(hp != hp_puff) { cout << "HP: " << hp << " von " << hp_max << endl; hp_puff = hp; } Sleep(1000); } // Anhalten f�r �berpr�fung system("pause"); CloseHandle(handle); return 0; } bool SetDebugPrivileges() { HANDLE hToken; TOKEN_PRIVILEGES tokenPriv; tokenPriv.PrivilegeCount = 1; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) return false; if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid)) return false; tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(hToken, false, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) return false; return true; }
-
Ich weiß zwar nicht ob das der Grund ist - aber ich würde dir empfehlen,die Rückgabewerte der verwendeten Funktionen auch auszuwerten, ob sie funktioniert haben.
-
danke das jemand sich die zeit genommen hat das anzusehen

was meins du genau damit ?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
dangerking schrieb:
was meins du genau damit ?

Deine Funktion SetDebugPrivileges() gibt einen bool zurück, ob der Zugriffsversuch geklappt hat, ReadProcessMemory() hat ebenfalls einen Rückgabewert. Bei beiden Aufrufen solltest du sicherstellen, daß sie geklappt haben:
//Rechte zum auslesen besorgen SetDebugPrivileges(); -> if(!SetDebugPrivileges()) cout << "Fehler beim Rechte Setzen " << GetLastError();
-
Überprüf deine Addressen/Offsets doch erst mal mit CheatEngine oä.
-
CStoll schrieb:
dangerking schrieb:
was meins du genau damit ?

Deine Funktion SetDebugPrivileges() gibt einen bool zurück, ob der Zugriffsversuch geklappt hat, ReadProcessMemory() hat ebenfalls einen Rückgabewert. Bei beiden Aufrufen solltest du sicherstellen, daß sie geklappt haben:
//Rechte zum auslesen besorgen SetDebugPrivileges(); -> if(!SetDebugPrivileges()) cout << "Fehler beim Rechte Setzen " << GetLastError();hab ich gemacht zeigt kein error an also scheint das ok zu sein

ich habe die addresen mit cheat engine überprüft bzw ja gefunden hier mal ein bild
-
Da steht 'Address of pointer' aber die ist doch uninteressant. Du suchst die eigentliche Addresse, die wäre: 0x03601BB8
-
geht leider immer noch nicht .. ich hab jetzt mal ne abfrage für processhandel eingehaubt und hab gemerkt das er immer 00000000000 anzeigt is das normal ? ne oder ? was muss ichtun
hoffe aufn paar tipps
-
Poste mal den Errorcode den du von GetLastError bekommst.
//Code direkt nach OpenProcess cout << GetLastError( ) << endl;