यह ज्ञात है कि .bs अनुभाग डिस्क में संग्रहीत नहीं किया गया था, लेकिन स्मृति में .bss खंड को शून्य में प्रारंभ किया जाना चाहिए। लेकिन स्मृति में इसे कहाँ लेना चाहिए? क्या ईएलएफ हेडर में प्रदर्शित कोई जानकारी है या क्या .bss अनुभाग डेटा अनुभाग के आगे दिखाई देने की संभावना है, या कुछ और ??ईएलएफ फ़ाइल के .bss अनुभाग को स्मृति में कहाँ लेना चाहिए?
उत्तर
पता करने के लिए जहां बीएसएस खंड स्मृति में हो जाएगा, यह readelf -S program
चलाते हैं, और की जाँच करने के लिए पर्याप्त है .bss
पंक्ति पर Addr कॉलम।
ज्यादातर मामलों में, आप यह भी देखेंगे कि प्रारंभिक डेटा अनुभाग (.data
) तुरंत पहले आता है। यही है, आप देखेंगे कि .data
अनुभाग में Addr + Size अनुभाग .bss
अनुभाग के प्रारंभिक पते से मेल खाता है।
हालांकि, यह हमेशा आवश्यक नहीं है। ये ऐतिहासिक सम्मेलन हैं, और ELF specification (प्लेटफार्म विशिष्ट पूरक के साथ पढ़ने के लिए, उदाहरण के लिए 32-bit x86 machines को कवर करने वाले अध्याय 5 में) अधिक परिष्कृत कॉन्फ़िगरेशन की अनुमति देता है, और उन सभी को लिनक्स द्वारा समर्थित नहीं किया जाता है।
उदाहरण के लिए, अनुभाग को .bss
कहा जा सकता है। केवल 2 गुण है कि एक बीएसएस अनुभाग में इस तरह कर रहे हैं:
- अनुभाग
SHT_NOBITS
के साथ चिह्नित है (जो है, यह स्मृति में अंतरिक्ष ले जाता है, लेकिन भंडारण पर कोई नहीं) जोreadelf
के उत्पादन मेंNOBITS
के रूप में दिखाई देता है। - यह एक लोड करने योग्य (
PT_LOAD
), पठनीय (PF_R
), और लिखने योग्य (PF_W
) सेगमेंट के लिए मानचित्र करता है। इस तरह का एक सेगमेंट मेमोरी (p_filesz
<p_memsz
) की तुलना में स्टोरेज पर भी छोटा है।
आप एक से अधिक बीएसएस वर्गों हो सकता है: PowerPC निष्पादनयोग्य .sbss
और .sbss2
अप्रारंभीकृत डेटा चर के लिए हो सकता है।
अंत में, बीएसएस अनुभाग आवश्यक रूप से डेटा अनुभाग या ढेर के निकट नहीं है। यदि आप Linux kernel (विशेष रूप से load_elf_binary
फ़ंक्शन में अधिक) की जांच करते हैं तो आप देख सकते हैं कि बीएसएस अनुभाग (या अधिक सटीक, segment यह मानचित्र करता है) को कोड और प्रारंभिक डेटा के साथ भी अंतःस्थापित किया जा सकता है। लिनक्स कर्नेल इसे हल करने का प्रबंधन करता है।
बीएसएस डेटा और ढेर के बीच है, जैसा कि this marvelous article में विस्तृत है।
आप size
का उपयोग कर प्रत्येक अनुभाग के आकार पता कर सकते हैं:
[email protected]:~$ size try
text data bss dec hex filename
1108 496 16 1620 654 try
- 1. ईएलएफ फ़ाइल में अनुभाग जोड़ना
- 2. आप केवल ईएलएफ अनुभाग
- 3. रैम से फ्लश ईएलएफ अनुभाग
- 4. क्या .bss अनुभाग शून्य प्रारंभिक चर elf फ़ाइल में स्थान पर कब्जा करते हैं?
- 5. .bss अनुभाग होने का क्या फायदा है?
- 6. प्रोटोटाइप विरासत स्मृति को बचा लेना चाहिए, है ना?
- 7. ईएलएफ कोर फ़ाइल प्रारूप
- 8. हाथ से ईएलएफ फ़ाइल
- 9. ईएलएफ
- 10. ईएलएफ फ़ाइल अनुभागों को पुन: व्यवस्थित करने का सरल तरीका
- 11. beans.xml कहाँ रखा जाना चाहिए?
- 12. ईएलएफ
- 13. 86 एएसएम लिनक्स - .bss धारा
- 14. Agile में कौन से समूहों को भाग लेना चाहिए?
- 15. ईएलएफ फ़ाइल को पढ़ने के लिए लाइब्रेरी DWARF डीबग जानकारी
- 16. मैं जीसीसी को ईएलएफ बाइनरी में लिखने योग्य के रूप में .text अनुभाग को संकलित कैसे कर सकता हूं?
- 17. 500 जीबी टेक्स्ट फ़ाइल आयात करने का सबसे तेज़ तरीका केवल अनुभाग लेना चाहता था
- 18. पुस्तकालयों को रेल 3 में कहाँ जाना चाहिए?
- 19. मुझे एएसपीनेट वेबएपीआई में प्राधिकरण को कहाँ प्लगइन करना चाहिए?
- 20. उपयोगिता कार्यों को Django में कहाँ रहना चाहिए?
- 21. एक ईएलएफ निष्पादन योग्य
- 22. स्मृति में निरंतर स्ट्रिंग कहाँ संग्रहित की जाएगी?
- 23. क्या ईएलएफ फ़ाइल में मनमाने ढंग से डेटा जोड़ना ईएलएफ स्पेक का उल्लंघन करता है?
- 24. उपयोगकर्ता स्थान में सी में ईएलएफ फ़ाइल लोड करना
- 25. लोड-टाइम ईएलएफ स्थानांतरण
- 26. ईएलएफ/लिनक्स
- 27. अनुभाग के भीतर अनुभाग - UITableView -
- 28. हास्केल - 'कहाँ'
- 29. मुझे किस खुले कोर्स व्याख्यान में भाग लेना चाहिए?
- 30. संस्करण स्वतंत्र पायथन पुस्तकालय कहाँ जाना चाहिए?
yep +1 उस आलेख के लिए आपने वास्तव में एक महान पोस्ट किया है – abhi
+1 क्या आप अभी भी 32 बिट दादाजी पर हैं? – JeremyP
सभी 64 बिट प्रचार समाप्त होने की प्रतीक्षा :-)) – cnicutar