Mengapa alamat __libc_start_main selalu sama di dalam GDB meskipun ASLR aktif?

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 harus mengacak semua alamat, termasuk salah satunya libc.so, tetapi saya menemukan bahwa alamat __libc_start_main()selalu ada 0x00007ffff7de8060di mesin Linux saya, mengapa? Apa yang salah?

陳 力
sumber
1
Apakah pengacakan ruang alamat juga mengacak alamat fungsi atau hanya variabel-variabel?
rubenvb
Apakah Anda melihat hasil yang sama jika Anda memulai sesi gdb baru untuk memeriksa alamat, alih-alih menjalankan kembali program dalam sesi gdb yang sama?
John Bollinger
@ JohnBollinger Saya sudah mencoba
陳 力

Jawaban:

24

Saat Anda menjalankan program di dalam gdb, gdbmencoba membantu Anda melakukan debug dengan menonaktifkan pengacakan alamat. Anda dapat menggunakan perintah berikut untuk mengaktifkannya (efektif dari program berikutnya):

set disable-randomization off
Marco Bonelli
sumber