Wie ein Programm im virtuellen Speicher liegt
Zusammenfassung
Gustavo Duarte erklärt virtuellen Adressraum, Kernelbereich, Stack, Heap, Mappings und Adressrandomisierung anhand eines Linux-Prozesses.
Ideen
- Jeder Prozess sieht einen eigenen virtuellen Adressraum.
- Seitentabellen übersetzen virtuelle Adressen in physischen Speicher.
- Ein geschützter Adressbereich hält Kernelcode ständig erreichbar.
- Der Stack speichert Aufrufrahmen und wächst typischerweise abwärts.
- Der Heap bedient dynamische Speicheranforderungen und wächst bedarfsgesteuert.
- Memory Mappings binden Bibliotheken und Dateien in den Adressraum ein.
Einsichten
- Virtueller Speicher isoliert Prozesse und abstrahiert zugleich knappe Hardware.
- Adressräume beschreiben mögliche Abbildungen und nicht tatsächlich belegten Arbeitsspeicher.
- Sicherheitsmechanismen nutzen dieselbe Übersetzungsschicht wie Speicherverwaltung.
- 32-Bit-Grenzen beschränken Programme lange vor vollständiger physischer Speichernutzung.
Fakten
- Ein 32-Bit-Adressraum umfasst theoretisch vier Gigabyte.
- Linux teilt ihn zwischen Nutzer- und Kernelbereich.
- ASLR verschiebt Stack, Heap und Mappings zufällig.
- Ein Kontextwechsel aktiviert die Seitentabellen des nächsten Prozesses.
Empfehlungen
- Lies Prozessabbildungen über /proc und passende Debuggerbefehle.
- Unterscheide virtuellen Adressraum, residenten Speicher und Dateicache.
- Aktiviere ASLR und nicht ausführbare Speicherbereiche auf Produktionssystemen.
Referenzen
Der Link zur Originalquelle öffnet einen neuen Tab.