No eXecute: CPU-Erweiterungen schützen vor Angriffen

Grundlagen des Speichermanagementes

Um zu verstehen, wie das NX-Bit mit den schon vorhandenen Prozessorkomponenten und bestehender Software zusammenarbeitet, ist Basiswissen über die x86-Architektur nötig. Die prinzipiellen Grundlagen, wie Speicherschutz und Adressverfahren überhaupt funktionieren, werden im Folgenden im Zusammenhang mit dem Einsatz bei den Schutzverfahren vorgestellt. Falls Sie diesen komplexen Hintergrund überspringen möchten, können Sie auf der Seite "Kernfrage NX - Funktionsprinzip" weiterlesen. Möchten Sie noch mehr Grundlagen zur X86-Speicherarchitektur erfahren, empfehlen wir unseren Beitrag x86-Programmierung und -Betriebsarten.

Die x86-Architektur verwaltet den Hauptspeicher immer in Blöcken mit typischen Größen von 4 KByte bis 4 MByte. Für das Management benötigt die Memory-Management-Unit (MMU) im Prozessor daher nicht alle Adressbits der logischen und der linearen Adresse (dazu mehr auf den nächsten Seiten). Vielmehr nutzt sie nur den oberen Teil des so genannten Speicher-Adressbitvektors der kompletten Adresse. Als großer Vorteil reduzieren sich dadurch der interne Speicherbedarf für Adressen und der Aufwand bei Adressberechnungen erheblich.

Diese Speicherblöcke lassen sich ohne die unteren, nicht-signifikanten Bits adressieren und mit speziellen Eigenschaften und Rechten ausstatten. Der Adressbitvektor wird während seiner Benutzung zu Speicherverwaltungszwecken in mehrere Teile geschnitten, wie beispielhaft im Bild dargestellt.

Diese einzelnen Teile aus einem Bitvektor kann der Prozessor dann an verschiedenen Stellen in unterschiedlichen Kombinationen nutzen. Für das Paging werden beispielsweise im Standardmodus von Windows die unteren 12 Bits nicht berücksichtigt. Hier arbeitet die CPU mit vier KByte-Speicherblöcken als kleinste Struktur. Dieses Verfahren der so genannten Teilbitvektoren ist außer bei Adressen auch in noch feinerer Unterteilung bei den Deskriptoren anzutreffen, dazu später mehr.