bk99.de entertain the web since 1997

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

Originalartikel lesen →