direktes auslesen des arbeitsspeichers mit C

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Babelduo
Beiträge: 518
Registriert: 25.01.2004 17:01:37

direktes auslesen des arbeitsspeichers mit C

Beitrag von Babelduo » 11.03.2005 17:27:03

hallo, ich schreibe das hier einfach mal hier ins forum da
ich unter linux programmiere - und nicht weis obs unter windows anders ist??

mich würde allgemein die direkte kommunikation mit dem speicher
interessieren! in welchen speicher kommen eigentlich die variablen wenn
ich sie deklariere?

dieses prog zeigt mir erst die adresse und inhalt von der vari test an.
wenn ich aber wie hier noch 3 weiter gehe, zeit er ja weitere inhalte
von anderen variablen an?!

Code: Alles auswählen

int test=100,i;
int *p_test=&test;
	
for(i=0;i<=3;i++)
{
printf("wert: %i | \t\t pointer: %x \t | \t %u\n",*p_test,p_test,p_test);
p_test++;
}

meine eigentlich frage ist, kann man den kompletten speicher aller
variablen des OS auslesen? mache ich das so wie in diesem kleinen programm,
oder was lese ich da aus?

also wie kann ich das machen?

würde mich mal interessieren!

danke schonmal, Babelduo
Wenn ich alles sehen könnte würde ich lernen die Augen zu schließen...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 11.03.2005 18:24:08

Hast du dir auch schon einmal über Protected Mode und Virtual Memory ...gedanken gemacht ?
Und selbst wenns funktionieren würde, was würdest du mit dem Datenmüll anfangen? Du kannst ja dann noch immer nicht die Daten interpretieren. Wenn du ein Byte von irgendwo ausließt, woher willst du wissen ob das ein einfaches Zeichen, ein Fragment einer Pointer-, Integer-, Double- Variable ist, oder gar Teil eines ausführbaren Codes ?

Gruß
gms

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 11.03.2005 19:03:43

Mit

Code: Alles auswählen

 char x = *(char*)0x12345678;
hat x den Wert der Speicherstelle 0x12345678 (im Datensegment). Dank des Protected Mode kannst du aber nur auf Daten, die zu deinem Programm gehören auslesen (grob gesprochen).Unter Linux kannst du als root auf die pseudodatei /dev/kmem zugreifen, die ein Abbild des gesamten Speichers enthält. Dort kannst du mit fseek etc. beliebig auf Speicher zugreifen.

Benutzeravatar
devilx
Beiträge: 734
Registriert: 26.08.2003 22:57:20
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Filderstadt
Kontaktdaten:

Beitrag von devilx » 14.03.2005 16:38:01

... oder du setzt das Ganze als Kernel Modul um, dann kannst du im Grunde tun und lassen was du willst. Wie jedoch bereits genannt wurde, ist es voellig Sinnlos sowas zu schreiben - Was machst du mit den Daten?
When you smile, the world smiles with you :)
When you fart, you stand alone :(
... a place full of dorkness

Antworten