Entiendo que cada instrucción debe leerse en la CPU para su ejecución, lo que probablemente es la razón por la que las páginas de códigos deben ser "r-x".
Pero mi observación es que el comportamiento de leer el código en la CPU para su ejecución es normal, mientras que leer el código en otro espacio de memoria (por ejemplo, copiar el código en un registro de propósito genérico) es bastante sospechoso. Un ejemplo es el beneficio de "Reutilización de código justo a tiempo para omitir ASLR" ( enlace ), y creo que los atacantes pueden utilizarlo de muchas otras formas.
Entonces, mi pregunta es ¿por qué no eliminar el permiso "r" de las páginas de códigos, es decir, por qué no diseñamos la CPU de manera que el código solo pueda leerse en la CPU para su ejecución?