PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ Ram



KDSBest
22-10-2003, 12:07
Hallo,

ich bin neu hier, wurde von www.linuxforen.de hier her geschickt ;)

Zur Frage:


ich wollte fragen, wie man mit C direkt aus dem Ram lesen kann oder direkt reinschreiben kann?

danke im vorraus.

KDSBest

axeljaeger
22-10-2003, 12:39
Was meinst du denn mit "direkt"?

sagi
22-10-2003, 13:06
ja. das geht.

du schnappst dir mit malloc ein stueckchen vom Speicher in dem du dann nach belieben lesen und schreiben kannst.

mfg

c.

KDSBest
22-10-2003, 13:07
Im Arbeitsspeicher will ich alle daten auslesen können.
Also den Inhalt der ganzen speicher addressen, wenn es geht, würde ich die auch modifizieren können, dass wäre ganz gut.

Danke im vorraus.

KDSBest

quinte17
22-10-2003, 13:28
du bewegst dich da schon auf recht dünnem eis...
wenn du was falsches erwischt schmiert im günstigsten fall dein programm ab, oder dein ganzes system...

du kannst schon mit malloc einen 1 byte bereich vom typ char hohlen, und dann den pointer der darauf zeigt woanders hinzeigen lassen alla *(pointer+10)

aber ich kann dir davon nur ABRATEN!

greetz

KDSBest
22-10-2003, 13:36
Kannst du mir einen kurzes beispiel hier hin schreiben, verstehe nicht genau wie du das meinst?

Danke im vorraus.

KDSBest

KDSBest
22-10-2003, 13:38
Meinst du das ungefair so:

#include <stdio.h>

int x;
int main()
{
char *a;
for (x=10;x<81;x++)
{
*a= *(a+x);
printf("Adresse a=%p, Wert a=%d\n",&a,*a);
}
return 0;
}

danke im vorraus.

KDSBest

KDSBest
22-10-2003, 13:41
Ich meine so sry, kleiner fehler!

#include <stdio.h>

int x;
int main()
{
int *a;
for (x=10;x<0xffffffff;x++)
{
*a= *(a+x);
printf("Adresse a=%p, Wert a=%d\n",&a,*a);
}
return 0;
}

Lin728
22-10-2003, 13:51
Soweit ich weiß geht das nur bei Prozessoren < 386 oder Betriebsystemen die sich nicht um memory-management kümmern (DOS).
Soweit ich weiß (nicht 100%ig), kontrolliert der Prozessor ob sich der Prozess in einem gültigen Speichernereich bewegt, und teilt es dem OS mit, wenn nicht -> Prozess wirk gekillt.

peschmae
22-10-2003, 14:10
ju,

das darf doch ein Prozess gar nicht können. Sonst könntest ja _jeder_ (auch remote) user _jeden_ Prozess (z.B. gpg) beliebig überwachen.

Und das möchte ich nicht. (Du vielleicht schon ;)) - aber das wird eben von der CPU verhindert. (im Protected Mode, in dem die Betriebssysteme (auser DOS) fahren auf jeden fall)

MfG Peschmä

anda_skoa
22-10-2003, 14:53
Als Root kannst zu zumindest von /proc/kcore lesen.

In einem Kernelmodul kann man alles, aber ist die Frage wozu?

Ciao,
_

RapidMax
22-10-2003, 14:57
Heutige Prozessoren ab 386er enthalten eine Memory-Management-Unit. Dabei handelt es sich um eine Hardware-Unterstützung, welche moderne Betriebsysteme nutzen können um das Beschreiben von gegenseitigem Speicherbereichen zu verhindern. Der Speicher wird hierbei in sogenannten Segmenten (typisch 4kByte) an ein Programm zugewiesen. Bei jedem Speicherzugriff testet die Hardware, ob das Programm auf die entspechende Addresse zugreiffen darf und ruft bei Verstössen eine Interrupt-Routine des Betriebsystem auf. Im Normalfall beendet das Betriebsystem Programme die auf einen Speicherbereich zugreiffen wollen, welcher nicht dem Programm gehört.

Wenn du unter Linux auf einen beliebigen Speicherbereich zugreiffen willst, dann muss die Anwendung mit root-Rechten laufen und auf spezielle Funktionen zugreiffen. Ev. ist dafür sogar ein Kernelmodul notwendig. Ich habe so eine Funktion noch nie benötigt, kann dir also nicht genau sagen wie das mit Linux im speziellen funktioniert.

Gruss, Andy

pik7
22-10-2003, 16:24
hallo,

wie wär's den mit
man mem

gruß