ReadProcessMemory() mit offsets
-
Ich hoffe ich bin hier im richtigen Forum gelandet, immer hin dreht sich mein Problem ja um eine Win-Funktion. :o
Ich habe folgendendes Problem. Ich habe eine Zeigeradresse von einem fremden Prozess und 2 offsets. Jetzt muss ich irgendwie mit der Adresse und den beiden offsets an den Wert in meiner Ziel-Adresse kommen. Leider weiß ich nicht so wirklich wie ich das anstellen soll.
#include "stdafx.h" #include <Windows.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { DWORD adresse1 = 0x00645378; DWORD offset1= 0x4; DWORD adresse2; DWORD offset2= 0x51F4; DWORD adresse3; int value; DWORD pid; HWND hwnd = FindWindow(NULL, "STREET FIGHTER IV"); GetWindowThreadProcessId(hwnd, &pid); HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); if(!phandle) { printf("SF4 nicht gefunden!\n"); system("Pause"); return 0; } else { printf("SF4 Fenster gefunden, PID: %d\n\n", pid); } if(ReadProcessMemory(phandle, (LPCVOID)adresse1, &adresse2, sizeof(DWORD), 0)) printf("Succes!\n"); else printf("Failed!\n"); adresse2 = adresse2+offset1; if(ReadProcessMemory(phandle, (LPCVOID)adresse2, &adresse3, sizeof(DWORD), 0)) printf("Succes!\n"); else printf("Failed!\n"); adresse3 = adresse3+offset2; if(ReadProcessMemory(phandle, (LPCVOID)adresse3, &value, sizeof(int), 0)) printf("Succes!\n\n"); else printf("Failed!\n\n"); printf("%d\n", value); system("Pause"); return 0; }Wie man sieht, überprüfe ich nach jedem lesen ob es funktioniert hat. Davon funktioniert allerdings nur die erste Anweisung, die nächsten beiden geben mir ein "Failed" aus. :<
-
Nach ewigem ausprobieren habe ich festhestellt, dass mein Code wahrscheinlich gar nicht das Problem ist. Das Programm mit dem ich mir die Adresse geholt habe (Cheat Engine) gibt diese als "StreetFighterIV.exe+00645378" an. Nur welchen Wert hat die exe-Datei?!

-
So, ich habe mein Problem jetzt selbst gelöst. Von der exe brauchte ich nur die erste Adresse um diese zu meiner zu addieren.
