Jetzt stellen wir uns mal janz dumm und fragen uns…
Was ist eigentlich die Von-Neumann-Architektur?
Ein Computer benötigt einerseits ein Programm, also festgelegte Befehle, die er nacheinander auszuführen hat, andererseits einen beschreibbaren Datenspeicher, in dem Ergebnisse abgelegt werden können, sowie eine zentrale Recheneinheit, den Prozessor. Die Idee von John von Neumann in den 1940er Jahren war nun, die Befehle des Programms ebenso wie die vom Programm errechneten Ergebnisse in den gleichen Datenspeicher zu schreiben.
Das hat einerseits enorme Vorteile: Während bisher ein Programm statisch, bspw. durch Lochkarten oder ähnliches, feste vorgegeben war, konnten die Befehle nun auf einfache Weise direkt im Datenspeicher geändert werden, wenn eine Programmänderung gewünscht war. Weiterhin musste nur die Größe eines gemeinsamen Datenspeichers, nicht von zwei getrennten Speichern, beachtet werden.
Aber die Von-Neumann-Architektur führte auch zu heute noch weithin bekannten Nachteilen: Wenn ein laufendes Programm Zugriff auf den gesamten Datenspeicher hat, könnte es sämtliche im Speicher befindlichen Befehle jederzeit überschreiben, eine kleine Taschenrechner-Anwendung könnte also durch Zugriff auf andere Datenbereiche das gesamte Betriebssystem problemlos zum Absturz bringen durch Änderung der Grundbefehle. Daher ist es zunächst notwendig jedem einzelnen Programm sein eigenes Speichersegment, logisch oder virtuell unterteilt, zuzuordnen, in dem das Programm zugreifen darf. Trotzdem kann es innerhalb dieses Segments immer noch geschehen, dass der Datenbereich im Speicher unabsichtlich den Befehlsbereich überschreibt und den Programmablauf somit ändert oder abbricht. Unzählige Systemabstürze basieren auf diesem Grundproblem der Speicherverwaltung. Wird absichtlich versucht, durch Schreiben großer Datenmengen den Befehlsspeicher gezielt zu überschreiben und zu manipulieren, spricht man von einer Sicherheitslücke durch einen Pufferüberlauf (buffer overflow)