ASLR est une technique conçue pour rendre plus difficile l'exploitation de divers types de dépassements de tampon, en déplaçant des segments autour d'un bit. La pile peut être déplacée de quelques octets (ou pages), les sections de votre programme (et même les bibliothèques que votre code utilise) peuvent être chargées à différentes adresses, etc.
Les débordements de mémoire tampon fonctionnent généralement en incitant le processeur à fonctionner code à une certaine adresse (souvent sur la pile). ASLR complique cela en rendant l'adresse plus difficile à prévoir, car elle peut changer à chaque fois que le programme s'exécute. Très souvent, au lieu d'exécuter du code arbitraire, le programme va juste se bloquer. C'est évidemment une mauvaise chose, mais pas aussi grave que si un joker aléatoire était autorisé à prendre le contrôle de votre serveur.
Une forme très simple et brutale d'ASLR peut effectivement être implémentée sans l'aide du système d'exploitation, simplement en soustrayant une petite quantité du pointeur de la pile. (C'est un peu difficile à faire dans les langages de niveau supérieur, mais un peu plus simple dans C - et carrément trivial dans ASM.) Cela ne protégera que contre les débordements qui utilisent la pile, cependant. L'OS est plus utile. ça peut changer toutes sortes de choses si ça fait envie. Cela dépend cependant de votre système d'exploitation.