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


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은의 주소를 포함하여 모든 주소를 무작위로 지정해야 libc.so하지만 주소 __libc_start_main()가 항상 0x00007ffff7de8060내 Linux 컴퓨터에 있음을 알았습니다 . 왜 그렇 습니까? 뭐가 잘못 되었 니?


1
주소 공간 무작위 화는 함수 주소 또는 변수의 주소 만 무작위 화합니까?
rubenvb

동일한 gdb 세션에서 프로그램을 다시 실행하는 대신 주소를 확인할 새 gdb 세션을 시작하면 동일한 결과가 나타 납니까?
John Bollinger

@JohnBollinger 나는 확실히 시도했습니다

답변:


24

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

set disable-randomization off
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.