Voici un exemple de programme compilé avec full RELRO et sans :
$ gcc test.c
$ readelf -r ./a.out | grep printf
08049790 00000107 R_386_JUMP_SLOT 00000000 printf
$ ./a.out 0x08049790
GOT overwriten !
$ gcc test.c -Wl,-z,relro,-z,now
$ readelf -r ./a.out | grep printf
08049fe8 00000107 R_386_JUMP_SLOT 00000000 printf
$ ./a.out 0x08049fe8
Erreur de segmentation
On remarque que sans la Read-only relocation, on arrive sans problème à réécrire une entrée de la GOT et donc à changer le cours d’exécution d’un programme.
Ce qui n’est plus possible en activant la protection, comme le montre l’erreur de segmentation.