Seite 3 von 3

Verfasst: 07.04.2007 17:46
von Zaphod
Ein überlauf ist ein hineinschreiben außerhalb des reservierten bereiches. Das geht deswegen (unter modernen betriebsystemen) nicht, weil der Speicher Virtualisiert und auch gegen fremdüberschreiben geschützt ist.

Wegen der MMU sieht dein allozierter bereich linear aus, aber das muß nicht physikalisch stimmen. Also die addresse, die für dein Programm als Addresse 0 aussieht ist in wirklichkeit irgend eine andere physikalische Addresse.

Wenn du jetzt 8kb Ram allozierst, dann kann es zufällig durchaus sein, dass die hintereinander im Speicher stehen. Es kann aber auch sein, dass deine Adresse byte 4096 (der begin deiner zweiten speicherhälfte) an einer ganz anderen stelle steht als das ende deiner ersten speicherhälfte byte 4095.

Dazwischen kann der Speicherbereich eines anderen Programmes stehen.

Es reicht aus Windows sicht nicht, dass der Speicher den du beschreiben willst frei ist (zumindest nicht unter den richtigen betriebsystemen NT/2k/XP/2003/Vista - unter pillepalle Win9x/ME geht es, ist aber nicht ratsam, da es mit extrem hoher wahrscheinlichkeit zu einem absturz führt), er muß auch von deinem Programm alloziert worden sein.

Verfasst: 07.04.2007 18:27
von ts-soft
In den Speicherbereich eines Fremdprogrammes kann er nicht gelangen,
er bleibt im virtuellen Speicher seines Programmes, aber dieses wird über
kurz oder lang abstürzen :mrgreen:

Verfasst: 07.04.2007 19:04
von Zaphod
Unter Win9x/ME kam man aber schon in den Speicherbereich eines Fremden Programmes... darum konnte man das ja auch mit Pointerfehlern abschießen.

Das das heutzutage nichtmehr geht hab ich ja gesagt ;)

Verfasst: 07.04.2007 19:06
von ts-soft
Meines Wissens nach, ist dies nur mit 16-Bit Anwendungen möglich, kann
mich aber auch Irren.

Verfasst: 07.04.2007 22:51
von AND51
Vielen Dank für eure Infos, besonders die, Zahpod!
Das sind die Informationen, die ich mir gewünscht hab. Wie gut du das erklären kannst! :allright:

Gibt es da noch mehr Infos, bzw. so eine Art Tutorial oder Link oder soetwas? Aber bitte nicht so ein umständliches Nachschlagewerk.

> Ich reserviere 4 Byte, schreibe aber 5 rein. Da auf heuteigen PCs immer genug freie Kapazitäten vorhanden sind, geht das auch.
Bitte nicht falsch verstehen. Ich meinte, das sei der Grund, warum es funktioniert, mehr als eigentlich reserviert in einen allokierten Speicherbereich zu poken.
Das war ja meine Frage, wegen der ich diesen Thread ja eröffnet habe.