Чому адреса __libc_start_main завжди однакова всередині GDB, навіть якщо ввімкнено 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 повинен рандомізувати всі адреси, включаючи одну libc.so, але я виявив, що адреса __libc_start_main()завжди є 0x00007ffff7de8060на моїй машині Linux, чому? Що не так?


1
Чи рандомізація адресного простору також рандомізує адреси функцій або лише зміни змінних?
rubenvb

Чи бачите ви такий самий результат, якщо ви запускаєте новий сеанс gdb, в якому перевіряти адресу, замість того, щоб повторно запускати програму в тому ж сесії gdb?
Джон Боллінгер

@JohnBollinger Я спробував напевно
陳 力

Відповіді:


24

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

set disable-randomization off
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.