• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Systemspeicherstellen auslesen und anzeigen (C) ?

abgdf

Guru
Hallo,

heute habe ich beim C-Lernen gelesen, daß Zeiger den Inhalt von Speicherstellen repräsentieren.
Üblicherweise deuten Zeiger auf Speicherstellen, an denen andere Variablen gespeichert sind.
Ich wollte jedoch versuchen, damit den Inhalt von anderen, Systemspeicherstellen auszulesen, also in BASIC:

10 FOR I=1 to 1000
20 PRINT I, PEEK (I)
30 NEXT I

In C habe ich dafür folgende Zeilen geschrieben:

#include <stdio.h>
int *z;
int i;
main ()
{
for(i=1;i<=1000;i++)
{
z=i;
printf("%d\t%d\n",i,*z);
}
}

Leider erhalte ich hier immer "Speicherzugriffsfehler" (während, wenn ich stattdessen z=&i; eingebe, für *z logischerweise (nochmal) der Wert der Variablen i ausgegeben wird).

Hat jemand eine Idee, wie ich mein Ziel erreiche ?

Beste Grüße
 

SP

Member
ich denke mal der prozess hat keine rechte auf den fremden speicherbereich zuzugreifen
eine andere erklärung wäre dass speicheradressen normalerweise hexadezimal angegeben werden
ich weiß zwar nich wofür so was gut sein soll aber du könntest ja einfach dem zeiger eine hexadezimaladresse zuweisen...
 

panamajo

Guru
SP schrieb:
ich denke mal der prozess hat keine rechte auf den fremden speicherbereich zuzugreifen
Genau.
Also nur auf Bereiche, die vorher brav beim OS per malloc() o.ä. angefordert wurden. Alles andere würde bedeuten dass wir alle unsere Passwörter genausogut ins Netz stellen könnten.
 
OP
A

abgdf

Guru
An die Rechte hatte ich auch schon gedacht und deshalb a.out als root ausgeführt. Dasselbe Ergebnis.

Aber ich glaube trotzdem, ihr habt recht.
Ich werde mir daher genauer die Rechteverwaltung von Prozessen und malloc() ansehen. Vielen Dank bis hierher.
 

SP

Member
das hat nix mit dem user zu tun - root darf zwar alle dateien öffnen ausführen usw. aber die prozessrechte hängen vom kernel ab und der verbietet generell zugriffe auf fremde speicherbereiche
 
OP
A

abgdf

Guru
Das klingt aber nicht sehr offen für Linux.

Z.B. beim ZX Spectrum konnte man noch das ROM auslesen und allerhand mit POKEs anstellen. Grafik beim C64 ging doch fast nur mit POKEs. Oder SYS 64728 oder so ähnlich ?!

Wenigstens könnte man, wenn man alles wüßte, die Kernel-Sourcen so ändern, daß der einem das nicht mehr verbieten würde (auch wenn das wahrscheinlich sicherheitsmäßig eine Katastrophe wäre).

Gruß
 

framp

Moderator
Teammitglied
Linux ist ein Multiuserbetriebssystem und schuetzt als solches die Benutzer voreinander wie auch sich selbst vor den Benutzern und gewaehrleistet damit Sicherheit und Robustheit
ZX und C64 dagegen waren nur fuer einen Benutzer gedacht - und auch wesentlich instabiler. :roll:
 
Oben