Dans l'architecture x86-64, comment le système d'exploitation peut-il spécifier les pages qui ne peuvent pas contenir de code exécutable ?
Le bit No-Execute ou bit NX (bit 63 de l'entrée de la table des pages) permet au système d'exploitation de spécifier les pages de l'espace d'adressage virtuel qui peuvent contenir du code exécutable et celles qui ne le peuvent pas. Une tentative d'exécution de code à partir d'une page marquée "no execute" entraînera une violation d'accès à la mémoire, similaire à une tentative d'écriture sur une page en lecture seule. Cela devrait rendre plus difficile la prise de contrôle du système par des codes malveillants via des attaques de type "buffer overrun" ou "unchecked buffer". Une fonction similaire est disponible sur les processeurs x86 depuis le 80286 en tant qu'attribut des descripteurs de segments ; cependant, elle ne fonctionne que sur un segment entier à la fois.
Le système d'exploitation peut marquer une page de l'espace d'adressage virtuel avec le bit No-Execute ou NX, qui est le bit 63 de l'entrée de la table des pages.
In the x86-64 architecture, how can the operating system specify which pages cannot contain executable code?
The No-Execute bit or NX bit (bit 63 of the page table entry) allows the operating system to specify which pages of virtual address space can contain executable code and which cannot. An attempt to execute code from a page tagged "no execute" will result in a memory access violation, similar to an attempt to write to a read-only page. This should make it more difficult for malicious code to take control of the system via "buffer overrun" or "unchecked buffer" attacks. A similar feature has been available on x86 processors since the 80286 as an attribute of segment descriptors; however, this works only on an entire segment at a time.
The operating system can tag a page of virtual address space with the No-Execute or NX bit, which is bit 63 of the page table entry.