direkt aus speicher lesen
-
Hi
ich habe bisher nur Java programmiert, will mir jetzt aber ein Programm schreiben, welches Daten einer anderen Anwendung direkt aus dem Speicher liest ähnlich einem Trainer für Computerspiele. Hab schon die suchen funktion genutzt, aber nichts gefunden.
ich weiß zwar, dass in c++ Zeiger auf die Adressen zeigen, doch wie ich dem Zeiger eine mir bekannte Adresse wie 0x07CB2478 zuweisen kann, bleibt mir ein rätsel. Irgendwie machen die Trainer das ja auch, also muss es ja irgendwie gehen. Ich hoffe auf Hilfe
MFG FlyingFox
-
Theoretisch ginge es so:
void* pointer = 0; pointer = pointer + 0x07CB2478;Aber unter Windows würde, dass zu einer Access Violation führen. EinProgramm darf nur auf seinen virtuellen Speicher zugreifen, sonst gibts Probleme.
Eine Windows-API-Funktion erlaubt glaub ich, sowas in der Art.
Falls du nicht irgendein Spiel hacken willst, solltest du die Daten aus der einen Anwendung in eine Datei schreiben, diese wird dann vom anderen Programm geöffnet.
Gruß
Don06
-
Hallo FlyingFox (nicht zufällig Andreas?)
unter Windows könntest Du mit CreateProcess() arbeiten, damit kannst Du dann auf den Adressraum des neuen Prozesses zugreifen.
-
Danke für die schnelle hilfe.
Hab jetzt erst die Zeit zu antworten. Ich heiße übrigens Daniel und nicht Andreas. Als ich das obige ausprobieren wollte kam nur folgende Fehlermeldung :
c:\dokumente und einstellungen\fox\desktop\c++\lesen und schreiben\lesen und schreiben\lesen und schreiben\Form1.h(143) : error C2036: 'void *': Unbekannte Größe
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Fox\Desktop\C++\Lesen und Schreiben\Lesen und Schreiben\Lesen und Schreiben\Release\BuildLog.htm" gespeichert.
Lesen und Schreiben - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========hab den code genauso kopiert.
Zeile 143 ist folgende:
pointer = pointer + 0x07CB2478;Das mit CreateProcess() hab ich noch nicht getestet.
MFG FlyingFox
-
Nimm mal BYTE statt void
-
Don06 schrieb:
Theoretisch ginge es so:
void* pointer = 0; pointer = pointer + 0x07CB2478;Aber unter Windows würde, dass zu einer Access Violation führen.
zu einem 'void*' kann man so nichts addieren. dazu müsste es ein anderer typ sein als void.
und 'ne access violation gibt's auch erst wenn man dereferenziert (geht aber auch nicht mit 'void*').

-
Unter Windows geht das mit ReadProcessMemory()
-
zieh dir mal die zwei tutorials rein, denke das damit die meisten deiner fragen erstmal abgedeckt sind.
Speicherzugriff teil 1wenn du dann noch wissen willst wie du schnell an bestimmte bytes im speicher kommen willst
kuckst du hier mal rein
-
Danke für die schnellen Antworten. Mit dem Tutorial hab ich es hinbekommen. Läuft jetzt einbandfrei.
Danke nochmal für eure Hilfe
MFG FlyingFox