में उपयोग की गई स्थिर पुस्तकालयों की सूची प्राप्त करें क्योंकि ldd
केवल गतिशील पुस्तकालयों को सूचीबद्ध करता है, क्या निष्पादन योग्य बनाने के लिए उपयोग की जाने वाली स्थिर पुस्तकालयों के बारे में जानकारी निकालने का कोई तरीका है?निष्पादन योग्य
उत्तर
ldd <exe filename>
गतिशील पुस्तकालयों
nm <exe filename>
फ़ाइल में प्रतीकों से पता चलता जुड़ा हुआ पता चलता है।
जो स्थिर पुस्तकालयों से आते हैं प्रतीकों उन पुस्तकालयों के खिलाफ nm
चल आवश्यकता है उन में प्रतीक (काम करता है, आदि) की एक सूची प्राप्त करने के लिए, तो nm <exe filename>
से प्रतीकों में से क्या अपनी सूची में उनकी तुलना देखने के लिए।
आप comm
कमांड के साथ सूचियों की तुलना करते हैं। विवरण के लिए man comm
देखें।
यह इस मंच here से लिया गया था।
नहीं, लिंकिंग प्रक्रिया के दौरान पुस्तकालयों के नाम त्याग दिए जाते हैं। हालांकि, अगर आपके निष्पादन योग्य में डीबग जानकारी है (यानी यह -g ध्वज के साथ संकलित किया गया था), तो आप उससे जानकारी प्राप्त कर सकते हैं।
क्या रॉ एएसएम को समझने का कोई तरीका नहीं है, या संकलक अनुकूलन और झंडे भी इससे प्रभावित होंगे? – MrMesees
जब तक कोई दिए गए कंपाइलर बाइनरी के अंदर किसी प्रकार का मेटा डेटा स्टोर नहीं करता है, तो नहीं। एक स्थिर पुस्तकालय कोड है जो सीधे बाइनरी में संकलित होता है।
यदि आपके पास स्रोत कोड है और इसके लिए सभी कोड नहीं जाना चाहते हैं, तो आप यह जानने के लिए संकलित करते समय मानचित्र फ़ाइल जेनरेट कर सकते हैं कि कौन से स्थिर पुस्तकालय जुड़े हुए हैं।
उदाहरण के लिए g++ -Xlinker -Map=a.map main.c
, लिंक की गई स्थिर लाइब्रेरी जानकारी के लिए मानचित्र फ़ाइल देखें।
कुछ ELF निष्पादन योग्य के अंदर स्थिर पुस्तकालयों की सूची प्राप्त करने का कोई तरीका नहीं है।
क्योंकि लिंकर के लिए, एक स्थिर पुस्तकालय का उपयोग सदस्यों के "आलसी" सेट के रूप में किया जाता है। इसलिए परिणामी ईएलएफ निष्पादन योग्य में केवल लिंक करने के लिए आवश्यक सदस्यों को शामिल किया जाएगा। तो foo2.o
जैसे libfoo.a
जैसे सदस्य ऑब्जेक्ट फ़ाइल foo2.o
निष्पादन योग्य में जुड़े हुए थे (बशर्ते foo2
में परिभाषित कुछ प्रतीक आवश्यक हैं, यानी कहीं संदर्भित किया गया है)।
, nm
, या objdump
, या readelf
, या strings
कुछ ELF निष्पादन पर उपयोग करने में कुछ संकेत दे सकते हैं किस बारे में है क्योंकि आप प्रतीकों देखेंगे (स्थिर पुस्तकालयों से आने वाले उन सहित) इसके अंदर हैं, वस्तु फ़ाइलों उन स्थिर पुस्तकालयों (या उनके अंदर उपयोग किए जाने वाले शाब्दिक तार) में परिभाषित (सदस्यों) में परिभाषित किया गया है।
आप किस तरह के संकेत का मतलब है? क्या आप उदाहरण दे सकते हैं? क्या आप मुझे स्रोत पर इंगित कर सकते हैं जहां मुझे इनमें से अधिक संकेत मिल सकते हैं? – stackoverflowwww
उदाहरण के लिए रीडल्फ का उपयोग करना आपको बाइनरी में उपयोग किए जाने वाले फ़ंक्शंस, ऑब्जेक्ट्स, प्रतीकों को दिखाएगा। ये उपयोग किए गए पुस्तकालयों को खोजने के लिए संकेत के रूप में कार्य कर सकते हैं। उदाहरण के लिए आप वहां Curl_http फ़ंक्शन देख सकते हैं और जानते हैं कि libcurl का सबसे अधिक उपयोग बाइनरी द्वारा किया जाता है और यदि यह गतिशील रूप से लिंक नहीं किया गया है तो इसे स्थिर रूप से लिंक किया जाना चाहिए। – ohgodnotanotherone
- 1. निष्पादन योग्य
- 2. निष्पादन योग्य
- 3. निष्पादन योग्य
- 4. निष्पादन योग्य
- 5. निष्पादन योग्य
- 6. निष्पादन योग्य
- 7. निष्पादन योग्य
- 8. निष्पादन योग्य
- 9. निष्पादन योग्य
- 10. निष्पादन योग्य
- 11. निष्पादन योग्य
- 12. निष्पादन योग्य
- 13. गैर निष्पादन निष्पादन योग्य फ़ाइल
- 14. सी # निष्पादन योग्य निष्पादन निर्देशिका
- 15. एक ईएलएफ निष्पादन योग्य
- 16. .net निष्पादन योग्य
- 17. एंटीवायरस मेरे निष्पादन योग्य
- 18. आकार और निष्पादन योग्य
- 19. अनचाहे निष्पादन योग्य
- 20. नियमित सी ++ निष्पादन योग्य
- 21. छोटे पायथन निष्पादन योग्य?
- 22. बूस्ट टूल निष्पादन योग्य
- 23. निष्पादन योग्य अमान्य एंटाइटेलमेंट
- 24. .NET निष्पादन योग्य प्रक्रिया
- 25. PyInstaller धीमी निष्पादन योग्य
- 26. आप निष्पादन योग्य
- 27. निष्पादन योग्य जार
- 28. क्यूटी निष्पादन योग्य
- 29. matlab निष्पादन योग्य
- 30. क्यूटी: निर्मित निष्पादन योग्य
@Goz और anon बिंदु के रूप में, यह केवल तभी काम करता है जब बाइनरी को नहीं हटाया गया है/इसमें डिबगिंग जानकारी शामिल है। किसी स्थिर पुस्तकालय को किसी एप्लिकेशन में लिंक करने के बाद नाम आवश्यक नहीं हैं (और इसका उपयोग भी नहीं किया जाता है) - कॉल सभी पते से हैं। –
यह सवाल का जवाब नहीं देता है। "उन पुस्तकालयों के खिलाफ एनएम चलाना" संभव नहीं है यदि आप पुस्तकालयों को नहीं जानते हैं; और वहाँ पुस्तकालयों को जोड़ने में अंतर्निहित रूप से उपयोग किया जाता है। – kavadias
यदि यह एक अज्ञात बाइनरी है, तो हम नहीं जानते कि पुस्तकालय मौजूद हैं। तो "उन पुस्तकालयों के खिलाफ एनएम चलाना" स्वयं को पराजित करता है। – goldenmean