W ^ X y "Una vez escribible, nunca ejecutable" son subcasos de DEP. DEP consiste en hacer que los accesos de lectura y los accesos de ejecución sean distintos (una página de escritura también es una página legible). W ^ X trata sobre el uso de DEP para imponer una política específica, que es que una página determinada nunca puede escribirse y ejecutarse al mismo tiempo.
El programador puede exigir el cumplimiento de la política W ^ X porque escribir "datos" y luego ejecutarlos confiablemente implica vaciar algunos cachés, lo que es una operación explícita y costosa. Pasar por el kernel (con una llamada mprotect()
) no es una forma difícil de hacerlo. Por otro lado, obligar al programador a hacer esas cosas explícitamente significa que no sucederá en otras situaciones, a saber, cuando un atacante intenta explotar un desbordamiento de búfer. Esta es una generalización de la característica "la pila no es ejecutable". (Sin embargo, el desbordamiento de búfer todavía está allí; W ^ X simplemente hace la vida más difícil para el atacante).
La política de "una vez que se puede escribir, nunca se puede ejecutar" me parece sospechosa: es incompatible con los compiladores JIT. De todos modos, sería un caso secundario de W ^ X: como W ^ X, en el que la transición W- > X está prohibida.