2011-01-16 7 views
3

Könnte mir jemand erklären, wie das NX-Bit auf Plattformen wie 32-Bit x86 emuliert werden kann, wo die Hardware es nicht bietet? Ich wäre dankbar für eine Erklärung der Grundlagen ihrer Nachahmung, da ich mir einfach nicht vorstellen kann, wie sie realisiert werden könnte. Danke im Voraus.NX-Bit-Emulation

Antwort

0

Ich habe noch nie NX-Emulation implementiert, aber etwas über x86 zu wissen ist meine beste Schätzung, wie es funktionieren kann.

Es hat alles damit zu tun, wie der Kernel global descriptor table einrichtet, um zu definieren, welcher Bereich von Adressen Code enthalten kann.

Wenn ich es unelegant zusammenfassen kann ... Auf x86 im 32-Bit-geschützten Modus haben diese alten "Segmentregister" aus 16-Bit-Code immer noch eine Bedeutung. Die Segmentregister bestimmen, welcher Eintrag in GDT verwendet wird. Die GDT-Einträge sind im Wesentlichen ein Speicherbereich. Wenn der Kernel das Register cs (Code-Segment) auf einen GDT-Eintrag zeigt, der nur Adressen im Bereich [x, y] hat, sind Adressen außerhalb dieses Bereichs nicht ausführbar.

Beachten Sie, dass dies viel grobkörniger als ein NX-Bit ist, da das NX-Bit in den page table Eintrag geht. Mit dem NX-Bit können Sie also eine beliebige Seite als nicht ausführbar markieren, während Sie mit cs Segmenten nur einen (normalerweise großen, zusammenhängenden) Bereich als nicht ausführbar angeben können.