Tại sao địa chỉ của __libc_start_main luôn giống nhau trong GDB mặc dù ASLR đang bật?


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 nên chọn ngẫu nhiên tất cả địa chỉ, kể cả địa chỉ, libc.sonhưng tôi thấy rằng địa chỉ __libc_start_main()luôn 0x00007ffff7de8060ở trên máy Linux của tôi, tại sao? Chuyện gì thế?


1
Liệu ngẫu nhiên không gian địa chỉ cũng ngẫu nhiên các địa chỉ hàm hoặc chỉ các biến?
rubenvb

Bạn có thấy kết quả tương tự nếu bạn bắt đầu một phiên gdb mới để kiểm tra địa chỉ, thay vì chạy lại chương trình trong cùng một phiên gdb không?
John Bollinger

@JohnBollinger Tôi đã cố gắng chắc chắn

Câu trả lời:


24

Khi bạn chạy một chương trình bên trong gdb, gdbcố gắng giúp bạn gỡ lỗi bằng cách vô hiệu hóa ngẫu nhiên địa chỉ. Bạn có thể sử dụng lệnh sau để kích hoạt nó (có hiệu lực từ lần chạy tiếp theo của chương trình):

set disable-randomization off
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.