El bit NX (sin ejecución) es una tecnología utilizada en las CPU para segregar áreas de un espacio de direcciones virtuales para almacenar datos o instrucciones del procesador. Un sistema operativo compatible con el bit NX puede marcar ciertas áreas de un espacio de direcciones como no ejecutables. Luego, el procesador se negará a ejecutar cualquier código que resida en estas áreas del espacio de direcciones. La técnica general, conocida como protección del espacio ejecutable , también llamada Write XOR Execute , se utiliza para evitar que ciertos tipos de software malicioso se apoderen de las computadoras insertando su código en el área de almacenamiento de datos de otro programa y ejecutando su propio código desde dentro de esta sección; Una clase de este tipo de ataques se conoce como ataque de desbordamiento de búfer .
El término bit NX se originó con Advanced Micro Devices (AMD), como término de marketing. Intel comercializa la función como el bit XD (desactivación de ejecución). La arquitectura MIPS se refiere a la función como bit XI (inhibición de ejecución). La arquitectura ARM se refiere a la característica, que se introdujo en ARMv6 , como XN (nunca ejecutar). [1] El término bit NX en sí se utiliza a veces para describir tecnologías similares en otros procesadores.
Los procesadores x86 , desde el 80286 , incluían una capacidad similar implementada a nivel de segmento . Sin embargo, casi todos los sistemas operativos para procesadores x86 80386 y posteriores implementan el modelo de memoria plana , por lo que no pueden utilizar esta capacidad. No había ningún indicador "Ejecutable" en la entrada de la tabla de páginas (descriptor de página) en esos procesadores, hasta que, para que esta capacidad esté disponible para los sistemas operativos que utilizan el modelo de memoria plana, AMD agregó un bit "no-ejecutar" o NX a la página. entrada de tabla en su arquitectura AMD64 , proporcionando un mecanismo que puede controlar la ejecución por página en lugar de por segmento completo.
Intel implementó una característica similar en su procesador Itanium ( Merced ), con arquitectura IA-64 , en 2001, pero no la llevó a las familias de procesadores x86 más populares ( Pentium , Celeron , Xeon , etc.). En la arquitectura x86 fue implementado por primera vez por AMD, como el bit NX , para su uso en su línea de procesadores AMD64 , como el Athlon 64 y Opteron . [2]
Después de la decisión de AMD de incluir esta funcionalidad en su conjunto de instrucciones AMD64, Intel implementó la característica de bit XD similar en procesadores x86 comenzando con los procesadores Pentium 4 basados en iteraciones posteriores del núcleo Prescott. [3] El bit NX se refiere específicamente al bit número 63 (es decir, el bit más significativo) de una entrada de 64 bits en la tabla de páginas . Si este bit se establece en 0, entonces el código se puede ejecutar desde esa página; si se establece en 1, el código no se puede ejecutar desde esa página y se supone que todo lo que reside allí son datos. Solo está disponible con el formato de tabla de páginas de modo largo (modo de 64 bits) o de extensión de dirección física (PAE) heredado, pero no con el formato de tabla de páginas de 32 bits original de x86 porque las entradas de la tabla de páginas en ese formato carecen del bit 64 utilizado para deshabilitar y habilitar la ejecución.
Windows XP SP2 y versiones posteriores admiten la Prevención de ejecución de datos (DEP).
En ARMv6 , se introdujo un nuevo formato de entrada de tabla de páginas; incluye un bit de "ejecutar nunca". [1] Para ARMv8-A , descriptores de bloque y página VMSAv8-64, y descriptores de bloque y página de descriptor largo VMSAv8-32, para las traducciones de la etapa 1 tienen bits "ejecutar nunca" para los modos privilegiado y no privilegiado, y descriptores de bloque y página. para la etapa 2, las traducciones tienen un único bit "ejecutar nunca" (dos bits debido a la característica ARMv8.2-TTS2UXN); Los descriptores de la tabla de traducción de descriptores cortos VMSAv8-32 en el nivel 1 tienen bits de "nunca de ejecución" para el modo privilegiado y sin privilegios y en el nivel 2 tienen un único bit de "nunca de ejecución". [4]
A partir de la cuarta edición del manual de arquitectura Alpha, DEC (ahora HP) Alpha tiene un bit de falla en la ejecución en las entradas de la tabla de páginas con OpenVMS , Tru64 UNIX y Alpha Linux PALcode . [5]
La MMU de referencia SPARC para Sun SPARC versión 8 tiene valores de permiso de Solo lectura, Lectura/Escritura, Lectura/Ejecución y Lectura/Escritura/Ejecutar en las entradas de la tabla de páginas, [6] aunque no todos los procesadores SPARC tienen una MMU de referencia SPARC.
Una MMU SPARC versión 9 puede proporcionar, pero no está obligada a proporcionar, cualquier combinación de permisos de lectura/escritura/ejecución. [7] Una entrada de la tabla de traducción en un búfer de almacenamiento de traducción en la arquitectura Oracle SPARC 2011, borrador D1.0.0, tiene bits ejecutables y grabables separados. [8]
Las entradas de la tabla de páginas para las tablas de páginas hash de IBM PowerPC tienen un bit de página de no ejecución. [9] Las entradas de la tabla de páginas para las tablas de páginas de árbol de base en Power ISA tienen bits de permiso separados que otorgan acceso de lectura/escritura y ejecución. [10]
Las entradas del búfer de traducción (TLB) y las entradas de la tabla de páginas en PA-RISC 1.1 y PA-RISC 2.0 admiten páginas de solo lectura, lectura/escritura, lectura/ejecución y lectura/escritura/ejecución. [11] [12]
Las entradas TLB en Itanium admiten páginas de solo lectura, lectura/escritura, lectura/ejecución y lectura/escritura/ejecución. [13]
A partir de la duodécima edición de los Principios de operación de z/Architecture , los procesadores de z/Architecture pueden admitir la función Protección de ejecución de instrucciones, que agrega un bit en las entradas de la tabla de páginas que controla si las instrucciones de una región, segmento o página determinada pueden ser ejecutado. [14]
Se agregaron bits APX y XN (nunca se ejecuta) en VMSAv6 [Arquitectura del sistema de memoria virtual]