__Libc_start_main का पता हमेशा GDB के अंदर ही क्यों होता है, हालांकि ASLR चालू है?


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मेरे लिनक्स मशीन पर होता है, क्यों? गलत क्या है?


1
क्या पता स्थान रैंडमाइज़ेशन भी फ़ंक्शन पते या केवल उन चर को यादृच्छिक करता है?
रुबेंव

क्या आप उसी परिणाम को देखते हैं यदि आप एक नए gdb सत्र को शुरू करते हैं जिसमें पते की जांच करने के बजाय उसी gdb सत्र में प्रोग्राम को फिर से देखना है?
जॉन बोलिंगर

@JohnBollinger मैं निश्चित रूप से कोशिश की है
陳力

जवाबों:


24

जब आप अंदर कोई प्रोग्राम चलाते हैं gdb, gdbतो एड्रेस रैंडमाइजेशन को डिसेबल करके आपको डीबगिंग में मदद करने की कोशिश करता है। आप इसे सक्षम करने के लिए निम्न कमांड का उपयोग कर सकते हैं (कार्यक्रम के अगले भाग से प्रभावी):

set disable-randomization off
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.