Para dificultar esto el kernel Linux introdujo en la versión 2.6.11 la aleatorización de direcciones (VA space randomization), tanto cuándo se mapean librerías en memoria o cuando se carga un programa, por tanto varían también las posiciones de la pila o las de código (section .text). Esto añade un rango de 8 MB para la carga del programa y librerías por lo que hace imposible acertar la dirección donde está el código. En Windows hasta la versión XP no se introdujo ninguna mejora. En XP se usa una cookie para detectar posibles desbordamientos en la pila cada vez que se llama a una función y se apila el EIP.
Finalmente en Windows Vista Beta 2 se introdujo ASLR (Address Space Layout Randomization) que se encarga de mapear un programa o librería en un rango de 256 posiciones [1].