ASLR açık olmasına rağmen __libc_start_main adresi GDB içinde neden hep aynı?


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 bunlardan biri de dahil olmak üzere tüm adresleri rastgele seçmelidir, libc.soancak adresinin __libc_start_main()her zaman 0x00007ffff7de8060Linux makinemde olduğunu gördüm, neden? Yanlış olan ne?


1
Adres alanı rasgeleleştirmesi işlev adreslerini mi yoksa yalnızca değişkenlerin adreslerini mi rasgele belirler?
— rubenvb

Aynı gdb oturumunda programı yeniden çalıştırmak yerine, adresi kontrol etmek için yeni bir gdb oturumu başlatırsanız aynı sonucu görüyor musunuz?
— John Bollinger

@JohnBollinger Kesinlikle denedim
— 陳 力

Yanıtlar:


24

İçeride bir program çalıştırdığınızda gdb, gdbadres rastgele seçimleri devre dışı bırakarak hata ayıklamanıza yardımcı olmaya çalışır. Etkinleştirmek için aşağıdaki komutu kullanabilirsiniz (programın bir sonraki çalıştırılmasından itibaren geçerlidir):

set disable-randomization off
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.