Dlaczego adres __libc_start_main jest zawsze taki sam w GDB, mimo że włączony jest ASLR?

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 powinien losowo przypisywać wszystkie adresy, w tym jeden libc.so, ale odkryłem, że adres __libc_start_main()zawsze znajduje się 0x00007ffff7de8060na moim komputerze z systemem Linux, dlaczego? Co jest nie tak?

陳 力
źródło
1
Czy randomizacja przestrzeni adresowej również randomizuje adresy funkcji, czy tylko adresów zmiennych?
rubenvb
Czy widzisz ten sam wynik, jeśli rozpoczniesz nową sesję gdb, w której chcesz sprawdzić adres, zamiast ponownie uruchamiać program w tej samej sesji gdb?
John Bollinger
@JohnBollinger Zdecydowanie próbowałem
陳 力

Odpowiedzi:

24

Po uruchomieniu programu wnętrze gdb, gdbstara się pomóc debugowania wyłączając adres randomizacji. Aby włączyć tę funkcję, możesz użyć następującego polecenia (obowiązuje od następnego uruchomienia programu):

set disable-randomization off
Marco Bonelli
źródło