W^X
W^X (prononcé "W xor X") est le nom d'une fonctionnalité dédiée à la sécurité informatique. C'est une forme de protection de la mémoire avec laquelle une page peut être accessible soit en écriture soit en exécution, mais en aucun cas les deux à la fois (d'où la référence à l'opérateur booléen xor, qui possède cette propriété).
Sans cette politique de protection, un programme peut écrire dans une zone mémoire des données qu’il peut par la suite faire exécuter par le processeur. Il s’agit d’une attaque courante dans l’exploitation de failles logicielles.
W^X et les implémentations similaires sont relativement simples à implémenter sur un processeur supportant les permissions fines sur les pages de la mémoire, tels que le SPARC, le SPARC64 ou le processeur AMD64.
Sur des processeurs disposant de fonctionnalités plus limitées, comme l'Intel i386, W^X est implémenté grossièrement de manière « détournée », en utilisant le segment de code CS pour définir une limite dans l'espace mémoire au-delà de laquelle l'exécution n'est plus autorisée. Cette zone est alors destinée à recevoir les données, et le code exécutable est placé en dessous de cette limite.
Des changements sont généralement nécessaires dans l'édition de liens pour séparer le code (comme le trampoline et d'autres codes pour les fonctions de l'éditeur de lien ou des bibliothèques dynamiques) et les données.