Por que o endereço __libc_start_main é sempre o mesmo no GDB, mesmo que o ASLR esteja ativado?

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 deve aleatoriamente todos os endereços, incluindo o endereço de libc.so, mas eu achei que o endereço de __libc_start_main()está sempre 0x00007ffff7de8060na minha máquina Linux, por quê? O que está errado?

陳 力
fonte
11
A randomização do espaço de endereço também randomiza os endereços das funções ou apenas os das variáveis?
rubenvb 16/01
Você vê o mesmo resultado se iniciar uma nova sessão gdb na qual verificar o endereço, em vez de executar novamente o programa na mesma sessão gdb?
John Bollinger
@JohnBollinger Eu tentei definitivamente
力 力

Respostas:

24

Quando você executa um programa interno gdb, gdbtenta ajudá-lo a depurar, desabilitando a randomização de endereço. Você pode usar o seguinte comando para habilitá-lo (a partir da próxima execução do programa):

set disable-randomization off
Marco Bonelli
fonte