[c] ASLR이 켜져 있는데도 __libc_start_main의 주소가 항상 GDB 내에서 동일한 이유는 무엇입니까?

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 컴퓨터에 있음을 알았습니다 . 왜 그렇 습니까? 뭐가 잘못 되었 니?



답변

내부 gdb에서 프로그램을 실행할 때 gdb주소 임의 화를 비활성화하여 디버깅을 도와줍니다. 다음 명령을 사용하여 활성화 할 수 있습니다 (다음 프로그램 실행에서 효과적 임).

set disable-randomization off


답변