Pourquoi l'adresse de __libc_start_main est-elle toujours la même dans GDB même si ASLR est activé?


16
Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/firstlove/projects/org-ioslide/example/a.out 

Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6
(gdb) Quit
(gdb) quit
A debugging session is active.

        Inferior 1 [process 16372] will be killed.

Quit anyway? (y or n) y
firstlove-pc% cat /proc/sys/kernel/randomize_va_space
2

IIUC, ASLR devrait randomiser toutes les adresses, y compris celle de libc.so, mais j'ai trouvé que l'adresse de __libc_start_main()est toujours 0x00007ffff7de8060sur ma machine Linux, pourquoi? Qu'est-ce qui ne va pas?


1
La randomisation de l'espace d'adressage randomise-t-elle également les adresses des fonctions ou uniquement celles des variables?
rubenvb

Voyez-vous le même résultat si vous démarrez une nouvelle session gdb dans laquelle vérifier l'adresse, au lieu de réexécuter le programme dans la même session gdb?
John Bollinger

@JohnBollinger J'ai certainement essayé
陳 力

Réponses:


24

Lorsque vous exécutez un programme à l'intérieur gdb, gdbessaie de vous aider à déboguer en désactivant la randomisation des adresses. Vous pouvez utiliser la commande suivante pour l'activer (à partir de la prochaine exécution du programme):

set disable-randomization off
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.