Warum ist die Adresse von __libc_start_main in GDB immer dieselbe, obwohl ASLR aktiviert ist?

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 sollte alle Adressen zufällig sortieren, einschließlich der von libc.so, aber ich habe festgestellt, dass die Adresse von __libc_start_main()immer 0x00007ffff7de8060auf meinem Linux-Computer ist. Warum? Was ist falsch?

陳 力
quelle
1
Randomisiert die Randomisierung des Adressraums auch Funktionsadressen oder nur die von Variablen?
Rubenvb
Sehen Sie dasselbe Ergebnis, wenn Sie eine neue GDB-Sitzung starten, in der die Adresse überprüft werden soll, anstatt das Programm in derselben GDB-Sitzung erneut auszuführen?
John Bollinger
@ JohnBollinger Ich habe es definitiv versucht
陳 力

Antworten:

24

Wenn Sie ein Programm ausführen gdb, wird gdbversucht, Ihnen beim Debuggen zu helfen, indem Sie die Adress-Randomisierung deaktivieren. Sie können den folgenden Befehl verwenden, um ihn zu aktivieren (gültig ab dem nächsten Programmlauf):

set disable-randomization off
Marco Bonelli
quelle