Почему адрес __libc_start_main всегда один и тот же внутри GDB, даже если ASLR включен? - PullRequest
16 голосов
/ 16 января 2020
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

IIU C, ASLR должен рандомизировать все адреса, включая адрес libc.so, но я обнаружил, что адрес __libc_start_main() всегда 0x00007ffff7de8060 на моем Linux компьютере, почему? Что не так?

1 Ответ

24 голосов
/ 16 января 2020

Когда вы запускаете программу внутри gdb, gdb пытается помочь вам в отладке, отключив рандомизацию адресов. Вы можете использовать следующую команду, чтобы включить ее (вступает в силу со следующего запуска программы):

set disable-randomization off
...