Perché l'indirizzo di __libc_start_main è sempre lo stesso in GDB anche se ASLR è attivo?


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 dovrebbe randomizzare tutti gli indirizzi, incluso quello di libc.so, ma ho scoperto che l'indirizzo di __libc_start_main()è sempre 0x00007ffff7de8060sulla mia macchina Linux, perché? Che c'è?


1
La randomizzazione dello spazio degli indirizzi randomizza anche gli indirizzi delle funzioni o solo quelli delle variabili?
rubenvb,

Vedi lo stesso risultato se avvii una nuova sessione gdb in cui controllare l'indirizzo, invece di rieseguire il programma nella stessa sessione gdb?
John Bollinger

@JohnBollinger Ho provato sicuramente

Risposte:


24

Quando esegui un programma all'interno gdb, gdbcerca di aiutarti a eseguire il debug disabilitando la randomizzazione degli indirizzi. È possibile utilizzare il comando seguente per abilitarlo (valido dalla prossima esecuzione del programma):

set disable-randomization off
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.