Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Systemspeicherstellen auslesen und anzeigen (C) ?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Systemspeicherstellen auslesen und anzeigen (C) ?

Beitrag von abgdf »

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
Member
Beiträge: 206
Registriert: 14. Mär 2004, 09:43

Beitrag von SP »

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...
Die Optimisten glauben, dass wir auf der besten aller möglichen Welten leben;
Die Pessimisten befürchten, dass das stimmt.

openSUSE 10.3
Benutzeravatar
panamajo
Guru
Guru
Beiträge: 2599
Registriert: 12. Feb 2005, 22:45

Beitrag von panamajo »

SP hat geschrieben: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.
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

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
Member
Beiträge: 206
Registriert: 14. Mär 2004, 09:43

Beitrag von SP »

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
Die Optimisten glauben, dass wir auf der besten aller möglichen Welten leben;
Die Pessimisten befürchten, dass das stimmt.

openSUSE 10.3
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

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ß
Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4323
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Beitrag von framp »

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:
abgdf
Guru
Guru
Beiträge: 3381
Registriert: 13. Apr 2004, 21:15

Beitrag von abgdf »

Also, ich finde, root sollte alles dürfen.
Antworten