यहां मेरा परिदृश्य है:क्रोट गतिशील लिंकिंग को कैसे प्रभावित करता है?
मैंने एक डीबूटस्ट्रैप उबंटू मावेरिक (64-बिट) वातावरण बनाया है। मैंने इसे अपने यूबंटू (64-बिट) ल्यूसिड सिस्टम पर /env/mav/
पर रखा। मैं chroot
/env/mav
में कर सकता हूं और पूरी तरह से एक मैवेरिक सिस्टम का उपयोग कर सकता हूं।
मैं भी चिंतित वातावरण के बाहर ल्यूसिड प्रोग्राम का उपयोग कर सकता हूं। वह /env/mav/bin/ls
चलाएगा।
हालांकि, मैंने देखा है कि होने के लिए अगर मैं LD_LIBRARY_PATH
संशोधित /env/mav/lib
[1] [2]
हर एक कार्यक्रम (दोनों स्पष्ट और आवारा) मैं तुरन्त दुर्घटना होगा चलाते हैं। (उदाहरण के लिए ls परिणाम segfault में)। kern.log पता चलता है:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
हालांकि, स्पष्ट रूप से अगर मैं /env/mav
में chroot
, हर कार्यक्रम ठीक चल रहा है। और सभी पुस्तकालयों को जेल से नहीं पढ़ा जा रहा है (/env/mav
) /lib
? तो इस संदर्भ में chroot
और LD_LIBRARY_PATH
के बीच अंतर क्या है?
इसके अलावा, अगर मैं:
mount -B /env /env/mav/env
और फिर chroot /env
और फिर सेट LD_LIBRARY_PATH
/env/mav/lib
होने के लिए, सब कुछ अभी भी ठीक से चलता है।
मैं आंतरिक रूप से यहां क्या हो रहा है इसके लिए एक नुकसान में हूं। क्या कुछ एलडी आंतरिक कहीं संग्रहीत हैं? क्या चिड़ियाघर कुछ जादुई करता है?
[1] केस का उपयोग मावेरिक पर्यावरण से प्रोग्राम चलाने के लिए सही ढंग से बाध्यकारी रूप से जुड़ी लाइब्रेरी को मावेरिक जेल के बाहर लाने के लिए किया जाता है।
[2] यह सिर्फ एक संक्षिप्त उदाहरण है। हकीकत में /usr/lib
, आदि सभी शामिल हैं। मावेरिक पर्यावरण/lib "poisons" सब कुछ सहित; अन्य मावेरिक लाइब्रेरी निर्देशिकाओं का उपयोग करने में कोई समस्या नहीं है।
लिनक्स लिंकिंग सिस्टम कैसे काम करता है इस बारे में स्पष्टीकरण के लिए धन्यवाद। पूरी तरह से काम किया। – UsAaR33
libpthread.so से libc.so (LD_DEBUG का उपयोग करके) को जोड़ने के साथ हुई दुर्घटना को बदल देता है। भविष्य में आने वाले लोगों को ध्यान दें, ld.so --list, आपको विभिन्न लिंकर्स के साथ ldd करने की अनुमति देता है। – UsAaR33