J'ai vérifié si ASLR est activé comme suit et je pense qu'il est:Pourquoi ne ASLR semble pas fonctionner
[[email protected] test]$ cat /proc/sys/kernel/randomize_va_space
2
Je l'ai essayé de tester le programme suivant:
test.c :
#include <stdio.h>
int main(void)
{
printf("%p\n", main);
return 1;
}
Je m'attendais, si ASLR est actif, à une adresse différente pour chaque exécution, non? Mais j'ai toujours la même chose. J'ai testé les deux pour les exécutables 64bit et 32bit. J'utilise un système 64bit Arch Linux pour tester ceci:
[[email protected] test]$ gcc test.c -o test
[[email protected] test]$ ./test
0x4004c6
[[email protected] test]$ ./test
0x4004c6
[[email protected] test]$ ./test
0x4004c6
[[email protected] test]$ ./test
0x4004c6
[[email protected] test]$ gcc -m32 test.c -o test
[[email protected] test]$ ./test
0x80483eb
[[email protected] test]$ ./test
0x80483eb
[[email protected] test]$ ./test
0x80483eb
[[email protected] test]$ ./test
0x80483eb
Comme vous pouvez le voir, l'adresse est la même pour chaque course. Cela ne signifie-t-il pas que ASLR est éteint?
Essayez de prendre l'adresse d'une variable, pas une fonction non statique – Elazar
BTW passant un non 'void *' à un argument '% p' dans 'printf' est un comportement indéfini – Elazar
@Elazar Pourquoi? Une fonction dans la section '.text' devrait être affectée par ASLR, non? N'est-ce pas ce à quoi ASLR est destiné au niveau le plus basique - randomiser la section exécutable? – baruch