STP045: Speicherstruktur aus Programmsicht
HomeSchlüsseltechnologie › Episode

STP045: Speicherstruktur aus Programmsicht

1:10:32 Oct 19, 2023
About this episode
In dieser Ausgabe greifen wir ein altes Thema erneut auf, bei dem ttimeless trotzdem stellenweise nur schwer folgen kann. Denn durch Wiederholung lernt man. Denn durch Wiederholung lernt man.Shownotes Rückblick: wir hatten schon einige Folgen zu Speicherverwaltung STP007: Speicherhierarchie (Festplatte und SSD, Arbeitsspeicher/RAM, Prozessor-Cache, Registerbank) STP019: Speicherschutz (virtueller Speicher, Auslagerungsspeicher/Swap, Direct Memory Access) Nachtrag/Linktipp: https://www.linuxatemyram.com das war alles aus Sicht des Betriebssystems; diesmal Abläufe innerhalb des Prozesses Was stellt uns das Betriebssystem bereit? -> Virtueller Speicher nominale Größe: entsprechend der Adressbreite des Prozessors (für 32 Bit sind das 2^32 Bytes = 4 GiB, für 64 Bit sind es 2^64 Bytes = 16 EiB = 16.777.216 TiB) nutzbar aber nur dort, wo das Betriebssystem für uns eine tatsächlich existierende Speicherseite einblendet initiale Belegung (siehe Beispiel unten): hauptsächlich Programmdatei und benötigte Programmbibliotheken mit ihren entsprechenden Segmenten Belegung (und Rückgabe) weiterer Speichersegmente mittels Syscalls (siehe STP019) klassische Struktur des virtuellen Speichers: oben der Stapel, unten ein Haufen vorher einige Bemerkungen zu klassischen Schutzmaßnahmen, die man im untenstehenden Beispiel sehen kann die untersten paar KiB des Adressbereiches werden nie vergeben dies verhindert versehentlichen Zugriff auf Nullzeiger mit hoher Wahrscheinlichkeit Address Space Layout Randomization (ASLR): Programmdateien und Programmbibliotheken werden an zufällig gewählten Speicheradressen eingeblendet, um es Angreifern zu erschweren, das Programm so zu manipulieren, dass es ungeplant in deren Code hineinspringt klingt nach einer einfach umsetzbaren Schutzmaßnahme war aber lange nicht weit verbreitet, weil der benötigte Position Independent Code (PIC) mit einem kleinen Geschwindigkeitsverlust (1-3%) einhergeht oberer Teil (d.h. bei hohen Adressen): Stack (Stapelspeicher) Programme sind meist als ineinander verschachtelte Unterprogramme (Subroutinen) aufgebaut (siehe STP011) Daten, die nur für die Dauer des jeweiligen Unterprogramms gebraucht werden, können im Stack aufgestapelt werden Idee: Hauptroutine kriegt den ganzen Stack und knapst sich oben soviel ab, wie es selber braucht nächste Unte
Select an episode
0:00 0:00