साझा की गई वस्तुएं


13

मैंने कुछ करते हुए देखा find /bin -exec file {} \;:

fileआदेश कुछ प्रविष्टियों की रिपोर्ट में /binकर रहे हैं shared objects, जबकि अन्य लोगों के रूप में, executables। उदाहरण के लिए,

/ बिन / एनटीएफएसके: एलएलएफ
64-बिट एलएसबी साझा वस्तु , x86-64, संस्करण 1 (SYSV),
गतिशील रूप से जुड़ा हुआ (जीएनयू / लिनक्स 2.6.24 के लिए) का उपयोग करता है, बिल्डआईडी [sha1] - 312d93fd0d8653e7236a61db2e67b6c62562525

के लिए एक ही रिपोर्ट gawk

/ usr / bin / gawk:
ELF 64-बिट LSB साझा वस्तु , x86-64, संस्करण 1 (SysV),
गतिशील रूप से जुड़े हुए (का उपयोग करता है साझा libs), जीएनयू / लिनक्स 2.6.24, के लिए
BuildID [SHA1] = 76bb13aac7e212164bd6e0d7b8a5d92db44543c9, छीन लिया

इसके विपरीत fileके लिए /bin/echoहै:

/ बिन / प्रतिध्वनि:
ELF 64-बिट LSB निष्पादन योग्य , x86-64, संस्करण 1 (SYSV),
गतिशील रूप से जुड़ा हुआ है (जीएनयू / लिनक्स 2.6.24 के लिए उपयोग किया जाता है),
BuildID [sha1] = 195e75fc13e9c4599e772b8d79125a5934cf601cccccc,

अनिवार्य रूप से, मैं जानना चाहता हूं कि executableफाइलों और shared objectफाइलों में क्या अंतर है ।


जवाबों:


14

Tl, डॉ

इस तथ्य से कोई अंतर नहीं है, इस तथ्य से अलग कि एक संकलित निष्पादन योग्य एक साझा वस्तु के खिलाफ जोड़ा जा सकता है लेकिन एक निष्पादन योग्य के खिलाफ नहीं।


सामान्य तौर पर, वहाँ संकलित करने के लिए दो तरीके हैं 1 एक निष्पादन:

  • स्थैतिक लिंकिंग का उपयोग करना: स्रोत कोड में शामिल बाहरी पुस्तकालयों को संकलित किया जाता है और संकलित पुस्तकालय (या लिंकर के परिप्रेक्ष्य में ऑब्जेक्ट) को निष्पादन योग्य में जोड़ा जाता है;
  • डायनेमिक लिंकिंग का उपयोग करना: स्रोत कोड में शामिल बाहरी पुस्तकालयों को संकलित किया जाता है, लेकिन संकलित पुस्तकालय (या लिंकर के परिप्रेक्ष्य में ऑब्जेक्ट) के लिए एक लिंक निष्पादन योग्य में जोड़ा जाता है (और संकलित लाइब्रेरी / ऑब्जेक्ट्स लिंकर द्वारा रन-टाइम पर लोड किए जाते हैं यदि जरूरत है);

इन विधियों में से प्रत्येक का उपयोग करने में फायदे / नुकसान हैं, लेकिन यह सवाल का बिंदु नहीं है;

  • /bin/ntfsckऔर /usr/bin/gawkसाझा किए गए ऑब्जेक्ट हैं: इसका मतलब है कि एक निष्पादन योग्य संकलित किया जा सकता है और फिर उनके खिलाफ उनकी कार्यक्षमता का उपयोग करने के लिए लिंक किया जा सकता है;
  • /bin/echoएक निष्पादन योग्य है: इसका मतलब है कि एक निष्पादन योग्य संकलित नहीं किया जा सकता है और फिर इसके खिलाफ इसकी कार्यक्षमता का उपयोग करने के लिए इसे जोड़ा जा सकता है;

इसलिए /bin/ntfsckऔर /usr/bin/gawkतकनीकी रूप से संकलित पुस्तकालय (या लिंकर के परिप्रेक्ष्य में वस्तुएं) हैं, लेकिन, जैसा कि एक व्यक्ति के पास हो सकता है, कुछ भी एक साझा वस्तु को एक निष्पादन योग्य के रूप में चलाने से रोकता है।

एक साइड नोट पर, यह भी देखें कि fileरिपोर्ट (उनमें से प्रत्येक के लिए):

गतिशील रूप से जुड़ा हुआ (साझा लिबास का उपयोग करता है)

इसका मतलब यह है कि उनमें से प्रत्येक गतिशील रूप से (और संभावित उपयोग) अन्य साझा वस्तुओं के साथ भी जुड़ा हुआ है।


1. "संकलन" का इरादा इसकी व्यापक स्वीकृति में है, जिसमें प्रीप्रोसेसिंग, संकलन और लिंकिंग शामिल हैं।


1
गतिशील रूप से अन्य साझा ऑब्जेक्ट्स में , OS से जुड़ा हुआ है ? या अपने आप में साझा पुस्तकालयों ?!
डॉ.अजकी

@ Mr.Hyde OS में, विशेष रूप से उन स्थानों में जो लिंकर में पहले से कॉन्फ़िगर होने चाहिए, ताकि लिंकर उन्हें जरूरत पड़ने पर रन-टाइम पर लोड कर सके। यहां देखें , अध्याय 3.2।
कोस

एक वास्तव में dlopen का उपयोग करते हुए एक निष्पादन योग्य के खिलाफ लिंक कर सकता है: D उदाहरण
एडम ज़हरान

6

एक और अंतर यह है कि निष्पादक में एक निर्धारित प्रवेश बिंदु पता ऑफसेट होता है, अर्थात, i386 के लिए 0x08048000, x86 के लिए 0x00400000 और बांह के लिए 0x00010000।

एक साझा ऑब्जेक्ट फ़ाइल एक लाइब्रेरी हो सकती है, लेकिन एक निष्पादन योग्य भी। एक निष्पादन योग्य होने पर, ऐसी कोई ऑफसेट नहीं है। एक साझा वस्तु निष्पादन योग्य , ऐसा कहने के लिए, एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR) का उपयोग करते हुए एक स्थितीय स्वतंत्र निष्पादन योग्य (PIE) है। इस प्रकार, जब इसकी / proc / pid / मैप्स फ़ाइल को देखते हैं, तो आप देखेंगे कि लोड किए गए सेगमेंट का स्थान मानक निष्पादक के विपरीत प्रत्येक निष्पादन में भिन्न होता है।

इस सुविधा के पीछे का विचार हमलावरों को रिटर्न-ओरिएंटेड प्रोग्रामिंग हमलों को करने से रोकने के लिए निष्पादन योग्य सुरक्षा में जोड़ना है। कई अनुचर ने PIE के साथ संकुल को डिफ़ॉल्ट रूप में सक्षम बनाने का निर्णय लिया, उदाहरण के लिए, फेडोरा 23 के बाद से या Ubuntu 17.10 के साथ।


दिलचस्प जवाब। कुछ स्रोतों को खो देता है (यदि आप कुछ लिंक जोड़ते हैं, तो अच्छा होगा, विशेष रूप से प्रवेश बिंदु भाग के लिए), लेकिन मैंने उस बारे में कुछ स्टैकओवरफ़्लो प्रश्नों की खोज की। लेकिन निश्चित रूप से अच्छा जवाब।
सर्गी कोलोडियाज़नी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.