![](/img/trans.png)
[英]How is main() called? Call to main() inside __libc_start_main()
[英]Why is the address of __libc_start_main always the same inside GDB even though ASLR is on?
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()
在我的 Linux 機器上的地址總是0x00007ffff7de8060
,為什么? 怎么了?
當您在gdb
運行程序時, gdb
嘗試通過禁用地址隨機化來幫助您進行調試。 您可以使用以下命令啟用它(從程序的下一次運行開始生效):
set disable-randomization off
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.