Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - daten in den ram schreiben (zeigern)


fbiel - Mi 05.11.03 19:30
Titel: daten in den ram schreiben (zeigern)
hi,

wie kann man einen wert, z.b. eine integervariable an eine adresse im ram speichern.

ich habe jetzt

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure blabla;
var zeiger:^integer;
begin
{Adresse wird von einem Anderen Programm ausgegeben und hier der var zeiger zugeordnet}
zeiger:=Pointer(StrToint(Edit1.text)); 
showmessage('Der Wert an der Stelle '+edit1.text+' ist '+IntToStr(zeiger^));
end;


so, das funktioniert auch solange ich beide programme gleichzeit laufen lasse, is ja logisch. aber wenn ich jetzt das programm beende, wird ja der wert an der adresse...... gelöscht. wie kann ich den wert auch noch nach dem beenden gespeichert lassen, sodass der dann mit dem obigen prg ausgelesen werden kann.
ich weiß das ganze ist eigentlich sinnlos, aber ich brauchs für die schule.


mfg
fbiel


UGrohne - Mi 05.11.03 19:48

IMHO ist das nicht möglich, vor allem nicht unter dem heutigen Windows. Jede Applikation bekommt dabei einen bestimmten Speicherbereich zugewiesen und hat keinen Zugriff auf anderen. Deswegen wirst Du es mit Delphi nicht hinkriegen in den Speicherbereich anderer Programme zu schreiben, sondern nur in dem Dir zugewiesenen. Und damit kann ein anderes Programm nicht aus Deinem oder auch Deinem ehemaligen Speicherbereich lesen.


Delete - Mi 05.11.03 20:12

Klar geht das. Mir VirtualAllocEx speicher im Fremden Prozess reservieren und dne kann man mit ReadMemory auslesen und mit WriteMemory beschreiben. Eine andere Möglichkeit wären InjectDLLS oder MemoryMappedFiles. Siehe dazu auch das Hooking Tutorial von Assarbad: http://www.luckie-online.de/tutorials/assarbad/


UC-Chewie - Mi 05.11.03 20:49

Ich würd MMFs (Memory Mapped Files) empfehlen. Ist relativ einfach, VirtualAlloc ist etwas komplizierter anzuwenden.


UGrohne - Mi 05.11.03 21:34

OK, ich nehm alles zurück und behaupte das Gegenteil. ;-)


fbiel - Do 06.11.03 17:38

hi,

irgendwie versteh ich net wie das so gehen soll. kann vielleicht jemand nen kleinen sourcecode posten. am besten mit der VirtualAllocEx Methode, das scheint mir am besten, soll ja net so kompliziert sein, is ja nur für schule.


thx


AndyB - Do 06.11.03 20:06

fbiel hat folgendes geschrieben:
is ja nur für schule.

Wenn das eine Hausaufgabe sein sollte, dann wird dir dein Lehrer das dazu notwendige Knowhow, sofern er es euch nicht selbst beigeracht hat, wohl nicht abkaufen.


fbiel - Fr 07.11.03 15:58

AndyB hat folgendes geschrieben:
fbiel hat folgendes geschrieben:
is ja nur für schule.

Wenn das eine Hausaufgabe sein sollte, dann wird dir dein Lehrer das dazu notwendige Knowhow, sofern er es euch nicht selbst beigeracht hat, wohl nicht abkaufen.


wir sollen uns das ja selbst erabrieten,
aber hat sich jetzt schon erledigt, ich habs noch hinbekommen


Delete - Fr 07.11.03 16:29

Es gebietet eigentlich die Höflichkeit, dass wen man selbst die Lösung findet, sie auch hier postet. :roll: