Im Speicher lesen und schreiben
-
aber windows kann, wie die meisten anderen os auch, dafür sorgen, dass ein programm nicht auf fremden speicher zugreiffen kann. und da spielts dann keine rolle ob man java, c++, c oder Assembler programmiert. aber netterweise bieten die betreibssysteme möglichkeiten doch auf fremden speicher zuzugrifen. aber das ist dann eben eine frage des os und nicht der programmiersprache.
-
INTEGER schrieb:
WinXP
-> Ab ins WinAPI-Forum

Du kannst ja wie gesagt auch mit C/C++ auf den gesamten Speicher zugreifen - aber das Betriebssystem registriert, dass du auf fremden Speicher zugreifen willst und lässt dich dabei voll im Stich -> es tötet dein Prorgamm. "0x00000005 Access Violation" heißt der Fehler unter Windows genau

Damit du Zugriff auf fremden Speicher bekommst musst du dir zuvor vom Betriebssystem die Erlaubnis dafür holen.
MfG SideWinder
-
Naja, dann könnt ihr eben den Thread verschieben.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.
-
-
Schau dir mal WriteProcessMemory an

edit: zu langsam
-
Irgentwie bekomm ich es nicht hin.
DWORD ID; HANDLE process; int data = x; int add = 0x429B40; DWORD size; ID = GetWindowThreadProcessId(hwnd,NULL); process = OpenProcess(NULL,NULL,ID); ReadProcessMemory(process,&add,&data,1,NULL);Wenn ich jetzt data ausgeben lass, hat es immer noch den Wert x.
An der Addresse 429B40 sollte aber 10 stehen. Was mach ich falsch?
-
Schau dir mal dir Parameter von OpenProcess nochmal genauer an

Wenn du nur lesen willst sollte PROCESS_VM_READ als 1. Parameter reichen - und beim 2. einfach FALSE
-
Ja, ich habs jetzt. Statt ID = GetWindowThreadProcessId(hwnd,NULL); muss es
GetWindowThreadProcessId(hwnd,&ID); heisen.
-
Um anderen die Arbeit zu erspraren hab ich den Code hochgeladen:
http://mitglied.lycos.de/yhva/Test05.cpp
Er ist zwar nicht ganz sauber, aber man hat dann wenigstens ein kleines Beispiel.Ich bin dafür, dass eine Upload-Section eingeführt wird, damit schon gelöste Probleme
für alle verfügbar sind.
-
Du kannst doch einfach direkt den Code hier posten - oder ist der so lang?
-
Bzgl. Uploadsection, die gibts bei uns nicht. Wir haben uns auf eine FAQ geeinigt (siehe unten) - ich finde übrigens, dass der Thread ganz brauchbar dafür ist

MfG SideWinder
-
Ich warte mal noch ein Weilchen, denn nach dem Verschieben könnt ihr ja nichts mehr dazu posten

-
Aber in diesem kleinen sample liest/schreibst du ja von deinem eigenen prozess (wenn ich mich nich verlesen hab, bin noch ziemlich müde -.-)
Wenn du aber auf virtuellen speicher anderer Prozesse zugreifst wird das schon interressanter.
Da geht das dann mit dem lesen und schreiben nichtmehr soleicht. Um nur was zu lesen musst du dir mit VirtualProtectEx() erstmal die rechte dafür holen.
wenn du was ÜBERschreiben willst (muss dann aber bitweise von der gleichen größe sein bzw. muss nicht, aber sonst ists quatsch 8)) musst du dir auch die rechte holen.
Wenn du was neues dazuschreiben willst, musst du mit VirtualAllocEx() arbeiten um für dich speicher zu reservieren.
Ich hoffe ich konnte trotz in meinem müdem Zustand helfenmfg jghj