Forum: PC-Programmierung Kann ein C-Point die MMU umgehen?


von Max (Gast)


Lesenswert?

Kann ein C-Point die MMU umgehen?

Z.B. ein Programm bekommt einen Ph Speicherbereich von 0x200000+ (nur 
gesponnen) kann ich dann mit einen Pointer trotzdem aus diesem bereich 
raus? z.B. int* p = 0x01;

von sebihepp (Gast)


Lesenswert?

Nein, da jeder Pointer auch durch die MMU gejagt wird.

Nur das Betriebssystem kann auf das PageDirectory und die PageTables 
zugreiffen. Es sei denn es sperrt sich selbst aus (Ja, das ist 
theoretisch möglich). :D

Viele Grüße
Sebihepp

von (prx) A. K. (prx)


Lesenswert?

Max schrieb:

> Kann ein C-Point die MMU umgehen?

Ja. DOS booten und darin das Programm laufen lassen. Ohne EMM386&Co. 
Dann ist die CPU im Real Mode und die MMU inktiv.

Sowas in der Art ist allerdings der einzige Weg.

von sebihepp (Gast)


Lesenswert?

Wenn dich der Zugriff auf unterester Ebene interessiert schreib mal eine 
Nachricht an sebihepp@aol.com =)

von Max (Gast)


Lesenswert?

Danke für eure Beiträge

Das Thema kam nämlich gestern bei einen Dozenten auf. Er meinte das man 
mit einem C Programm einen ganzen Rechner (x86) zum abstürzen bringt 
wenn man einen Pointer falsch setzt. Ich meinte dann nur das eigentlich 
jedes Programm durch die MMU geschützt wird und "nur" ein Laufzeitfehler 
entsteht. Er meinte dann das dies auch richtig ist aber nicht bei 
Pointer. Ich wollte mit Ihm auch nicht Diskutieren weil ich C mehr im µC 
Bereich einsetzte und es dort keine MMU gibt (bei meinen µC). Da war ich 
mir dann echt unsicher.

Aber dank euch bin ich mir jetzt wieder sicher und kann heute die 
Diskussion anfechten :)

von Klaus W. (mfgkw)


Lesenswert?

Bei DOS und 16-Bit-Win wird keine MMU verwendet und
alle Programme sehen denselben Speicher - jedes Programm
kann per Pointer alles vermurksen.
Erst bei NT/XP/Vista/7 sind die Speicherm, den die Prozesse
sehen, per MMU gegeneinander abgeschottet.

von (prx) A. K. (prx)


Lesenswert?

Klaus Wachtler schrieb:

> Bei DOS und 16-Bit-Win wird keine MMU verwendet

Aber nur urtümliches 16-Bit Windows im Real Mode, Version 1.x oder so, 
was damals kaum jemand einsetzte. Das bekanntere Windows 3.x verwendete 
zwar nicht das heute verbreitetere Paging als primäres Mittel der 
Speicherzugriffssteuerung, aber eine segmentierte MMU mit entsprechendem 
Zugriffsschutz wurde im 16-Bit Protected Mode durchaus verwendet.

Inwieweit in diesem Win 3.x die MMU einen effektiven Zugriffsschutz dem 
Betriebssystem gegenüber implementierte ist mir allerdings nicht 
geläufig. Die MMU legte dies zwar nahe, offen ist jedoch, inwieweit Win 
3.x dies auch nutze.

von Klaus W. (mfgkw)


Lesenswert?

A. K. schrieb:
> Inwieweit in diesem Win 3.x die MMU einen effektiven Zugriffsschutz...

Ja, die Win 3.* waren etwas dazwischen ("ein bißchen MMU"),
aber für die ursprüngliche Frage kann man den Zwitter auch
weglassen. Also etwas Kondom für nur etwas schwanger...
Bei DOS hat man einen Speicher für alle und der Lehrer hat recht,
bei NT bis 7 ist es anders und die MMU schlägt voll zu, indem
die Speicher der Prozesse getrennt sind. Da kann man
selbst unter Windows nicht einfach mit einem Speicherzugriff
das OS abschießen. Sollte zumindest.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.