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.