कोर डंप आपके प्रोग्राम मेमोरी फुटप्रिंट का सिर्फ डंप है, अगर आपको पता है कि जहां सब कुछ था तो आप बस उसी का उपयोग कर सकते थे।
आप निष्पादन योग्य का उपयोग करते हैं क्योंकि यह बताता है कि (तार्किक पते के संदर्भ में) चीजें मेमोरी में कहाँ स्थित हैं, अर्थात कोर फ़ाइल।
यदि आप एक कमांड का उपयोग करते हैं तो objdump
यह निष्पादन योग्य वस्तु के बारे में मेटा डेटा को डंप करेगा जिसे आप जांच कर रहे हैं। उदाहरण के रूप में a.out नाम की एक निष्पादन योग्य वस्तु का उपयोग करना।
objdump -h a.out
हेडर की जानकारी को केवल डंप करता है, आपको उदाहरण के लिए अनुभाग दिखाई देंगे। .data या .bss या .text (वहाँ कई और अधिक कर रहे हैं)। ये कर्नेल लोडर को सूचित करते हैं कि ऑब्जेक्ट में विभिन्न खंड कहाँ पाए जा सकते हैं और कहाँ प्रक्रिया पते में सेक्शन को लोड किया जाना चाहिए, और कुछ वर्गों (जैसे .डाटा .text) के लिए क्या लोड किया जाना चाहिए। (.bss अनुभाग में फ़ाइल में कोई डेटा शामिल नहीं है, लेकिन यह असमान डेटा के लिए प्रक्रिया में आरक्षित करने के लिए मेमोरी की मात्रा को संदर्भित करता है, यह शून्य से भरा है)।
निष्पादन योग्य ऑब्जेक्ट फ़ाइल का लेआउट एक मानक, ईएलएफ के अनुरूप है।
objdump -x a.out
- सब कुछ डंप
यदि निष्पादन योग्य वस्तु में अभी भी अपने प्रतीक टेबल हैं (इसे छीन नहीं लिया गया है - man strip
और आप
एसी स्रोत संकलन मानने के -g
लिए डिबग पीढ़ी उत्पन्न करते थे gcc
), तो आप प्रतीक नामों द्वारा मुख्य सामग्रियों की जांच कर सकते हैं, जैसे कि यदि आपके पास एक चर / बफर था आपके स्रोत कोड में inputLine नाम , आप gdb
उसकी सामग्री को देखने के लिए उस नाम का उपयोग कर सकते हैं । यानी gdb
आपके प्रोग्राम्स के आरंभिक डेटा सेगमेंट की ऑफसेट से पता चल जाएगा जहां इनपुटलाइन शुरू होती है और उस वेरिएबल की लंबाई।
इसके अलावा पढ़ने Article1 ,
अनुच्छेद 2 , और जुओं से भरा हुआ किरकिरा के लिए निष्पादन योग्य और लिंकिंग स्वरूप (ELF) विनिर्देश ।
नीचे @mirabilos टिप्पणी के बाद अपडेट करें।
लेकिन अगर प्रतीक तालिका का उपयोग कर रहे हैं
$ gdb --batch -s a.out -c core -q -ex "x buf1"
का उत्पादन
0x601060 <buf1>: 0x72617453
और फिर प्रतीक तालिका का उपयोग नहीं करना और सीधे पते की जांच करना,
$ gdb --batch -c core -q -ex "x 0x601060"
का उत्पादन
0x601060: 0x72617453
मैंने 2 डी कमांड में प्रतीक तालिका का उपयोग किए बिना सीधे मेमोरी की जांच की है।
मैं यह भी देखता हूं, @ user580082 का उत्तर स्पष्टीकरण के लिए आगे जोड़ता है, और वोट देगा।