2013-11-14 8 views
23

जब मैं ldd program चलाने मैं प्रपत्रld-linux.so.2 और linux-gate.so.1 क्या हैं?

linux-gate.so.1 => (0xb77ae000) 
    libstdc++.so.6 => /lib/libstdc++.so.6 (0xb76bc000) 
    libm.so.6 => /lib/libm.so.6 (0xb7691000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7674000) 
    libc.so.6 => /lib/libc.so.6 (0xb74c2000) 
    /lib/ld-linux.so.2 (0xb77af000) 

का उत्पादन मिलता है आप उत्पादन और कारण linux-gate.so.1 और ld-linux.so.2 अन्य प्रविष्टियों की तुलना में अलग दिखाने की व्याख्या कर सकते हैं? उनकी भूमिका क्या हैं?

उत्तर

40

मुझे आशा है कि आप मुख्य प्रविष्टियों, जो स्पष्ट करते हैं कि अनुरोध किया पुस्तकालय libm.so.6 के लिए यह फ़ाइल /lib/libm.so.6 में पाया गया था उदाहरण के लिए, के बारे में नहीं कह रहे हैं, लेकिन दो बाहरी कारकों के बारे में पूछ रहे हैं।

क्यों वे अलग ढंग से दिखाया गया है कर रहे हैं? linux-gate.so.1 के लिए यह इसलिए है क्योंकि यह वास्तव में डिस्क पर एक फ़ाइल नहीं है - यह कर्नेल द्वारा सिस्टम कॉल करने के लिए तंत्र के रूप में उजागर किया गया है। /lib/ld-linux.so.2 के लिए यह इसलिए है क्योंकि इस कार्यक्रम दुभाषिया है कि वास्तव में आवेदन को चलाने के लिए प्रयोग किया जाता है है।

एक बहुत अच्छा blog entry linux-gate.so का वर्णन नहीं है, और यह बहुत अच्छी तरह से यह बताते हैं।

/lib/ld-linux.so.2 के लिए, आप क्या होता है का एक छोटा समझने के लिए जब आप एक ELF द्विआधारी लांच की है। संक्षिप्त जवाब यह है कि इस प्रकार की बाइनरी के लिए कर्नेल हैंडलर इस फ़ाइल का उपयोग एप्लिकेशन लॉन्च करने के प्रयोजनों के लिए करता है।

इस कार्यक्रम का मुख्य उद्देश्य बाइनरी को मेमोरी में मैप करना, प्रोग्राम में किसी भी संदर्भित पुस्तकालयों को लोड करना है (उदाहरण के लिए पहले libm.so.6 पहले उल्लिखित), और उसके बाद बाइनरी के शुरुआती पते पर नियंत्रण बंद करें मार डाला।

इस कार्यक्रम के कार्यक्रम हेडर के INTERP अनुभाग में, ELF फ़ाइल की संरचना के भाग के रूप में परिभाषित किया गया है। 32 बिट लिनक्स बाइनरी के लिए, यह 32 बिट दुभाषिया का सामान्य नाम है। 64 बिट बाइनरी के लिए, आप पाएंगे कि इसे आमतौर पर ld-linux-x86_64.so.2 (64 बिट x86 प्लेटफ़ॉर्म के लिए) कहा जाता है।

INTERP   0x0000000000000238 0x0000000000400238 0x0000000000400238 
       0x000000000000001c 0x000000000000001c R  1 
    [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] 
+0

"रन-टाइम दुभाषिया":

आप इस जानकारी खुद readelf -l उपयोग कर, और interp अनुभाग निर्धारित कर सकते हैं? क्या आप उस पर विस्तार कर सकते हैं, कृपया? –

+2

क्षमा याचना, तकनीकी शब्द है * कार्यक्रम * दुभाषिया - मैं एक पैराग्राफ काम यह – Petesh

+0

आपको बहुत बहुत धन्यवाद करता है कि के सबसे ब्यौरा जोड़ दिया है, thats बिल्कुल भ्रम मैं :) में लक्ष्य था साफ करता है। शानदार है कि आप यह भी समझाते हैं कि ईएलएफ अनुभागों को देखते हुए भ्रम कैसे उत्पन्न हो सकता है, मुझे यह नहीं पता था। –

संबंधित मुद्दे