मेरे पास (असेंबलर कोड से) के रूप में संकलित एक ऑब्जेक्ट फ़ाइल है।gdb मेमोरी एक्सेस शिकायत पर विवरण
अगर मैं यह ld का उपयोग कर, जब मैं stepi (या nexti) gdb पता 0x0 में स्मृति का उपयोग के बारे में शिकायत करने की कोशिश जोड़ देते हैं। यदि मैं इसे gcc का उपयोग करके लिंक करता हूं, तो सब ठीक है।
मैं इस समस्या अनुमान लगा रहा हूँ ld है, जो कम वर्गों का उत्पादन जब जीसीसी को लिंक करने परिणाम की तुलना में कारण होता है।
क्या जीडीबी को अधिक वर्बोज़ करने के लिए कॉन्फ़िगर करने का कोई तरीका है ताकि मैं निष्पादन योग्य के साथ क्या गलत हो सकता हूं?
(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main()
(gdb) x/10i $pc
0x100000f8e <main>: fbld 0x6c(%rip) # 0x100001000 <data1>
0x100000f94 <main+6>: fimul 0x7a(%rip) # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp 0x60(%rip) # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0 $0x2000001,%rax
0x100000fa7 <main+25>: mov $,%rdi
0x100000fae <main+32>: syscall
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main()
पुनश्च: निष्पादन योग्य ही दोनों संस्करणों में अपेक्षा के अनुरूप चलाता है।
बाद में संपादित करें: आदेशों मैं संकलित करने के लिए उपयोग किया है:
as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
क्या आपने "stepi" कमांड के बाद रजिस्ट्रार (जानकारी रजिस्ट्रार) या स्टैक को डंप करने की कोशिश की है, और यदि अलग है, तो? निष्पादन योग्य ठीक होने पर आप परवाह क्यों करते हैं? – AlastairG
मैं "stepi" से पहले और बाद में रजिस्टरों को डंप कर सकता हूं लेकिन मुझे कुछ भी प्रासंगिक नहीं दिख रहा है। मुझे परवाह है क्योंकि मुझे अस्पष्ट व्यवहार पसंद नहीं है। – diciu
आपने 'ld' और 'gcc' (और 'जैसा' निश्चित रूप से) को कैसे कॉल किया? आप किस झंडे का उपयोग करते थे? – Bart