PaX jest łatką na jądro, która implementuje zabezpieczenia pamięci programów. Zabezpiecza dane przed wykonaniem oraz kod wykonywalny przed nadpisaniem. PaX również wporwadza losowe mapowanie pamięci, co utrudnia skoki do kodu na stosie, stercie i powrotu do libc.
ASLR losowo rozmieszcza stos, stertę oraz kod w przestrzeni adresowej procesu. Losowo również mapuje biblioteki dynamiczne. Pomiędzy poszczególnymi mapowaniami zostawia dość dużo wolnych adresów, aby poszczególne części mogły swobodnie rosnąć nie kolidując ze sobą. Rozrzut adresów posczególnych segmentów jest dość duży - na architekturze 32 bitowej adresy sterty oraz stosu posiadają 23 losowe bity, a bibliotek po 16. Na architekturze 64 bitowej liczba losowych bitów adresu jest oczywiście większa. Początki segmentów są wyrównywane do początków stron dla lepszej wydajności działania procesów.
Losowe mapowanie pamięci praktycznie uniemożliwia w kodzie wprowadzonym przez hakera skok do wybranej lokalizaji. (O ile nie może podejrzeć informacji o mapowaniach w /proc)
Polega ona na:
Niektóre programy generują jednak kod, który później jest przez nie wykonywany (Java, XFree, Xorg, mpalyer i narzędzia dla multimediów oparte o xine-lib). Można dla nich wyłączyć zabezpieczenia PaX.