मैं कैसे निर्धारित करूं कि कोई लाइब्रेरी में कोई फ़ंक्शन मौजूद है या संकलित लाइब्रेरी में फ़ंक्शंस सूचीबद्ध करता है?संकलित लाइब्रेरी में निहित उपलब्ध फ़ंक्शंस आदि को आप कैसे सूचीबद्ध करेंगे?
उत्तर
आप स्थिर पुस्तकालयों में प्रतीकों को सूचीबद्ध करने के लिए nm कमांड का उपयोग कर सकते हैं।
nm -g -C <libMylib.a>
उपयोग इस आदेश:
आयकर objdump "अपने-पुस्तकालय"
से अधिक आप चाहते हैं प्रिंट होगा - न केवल नाम से कार्य है, लेकिन पूरे प्रतीक तालिका। आपको प्राप्त प्रतीकों के विभिन्न विशेषताओं की जांच करें, और आप चर और सामान से फ़ंक्शंस को सॉर्ट करने में सक्षम होंगे।
लिनक्स/यूनिक्स के तहत आप किसी दिए गए ऑब्जेक्ट में निहित निर्यात किए गए प्रतीकों की सूची के लिए objdump -T
का उपयोग कर सकते हैं। विंडोज के तहत dumpbin
(आईआईआरसी dumpbin /exports
) है। ध्यान दें कि अधिभारों को अनुमति देने के लिए सी ++ फ़ंक्शन नामों को उलझाया जाता है।
संपादित करें: कोडेलोगिक के anwser को देखने के बाद मुझे याद आया कि objdump भी समझता है-डी-मैंगलिंग करने के लिए।
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
:
ELF binaries के लिए, आप readelf उपयोग कर सकते हैं सूची प्रतीकों -W
: बहुत लंबा नाम
awk आदेश तो सभी कार्यों को फ़िल्टर कर देगा, और ग कटौती नहीं करते हैं ++ फिल्ट उन्हें उलझाएगा। इसका मतलब है कि यह उन्हें एक आंतरिक नामकरण योजना से बदल देगा ताकि वे मानव पठनीय रूप में प्रदर्शित हो जाएं। यह इस के लिए इसी तरह के नाम आउटपुट (boost.filesystem lib से लिया गया):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
बिना C++ filt
, नाम _ZN5boost9exceptionD0Ev
माइक्रोसॉफ्ट उपकरणों के लिए के रूप में प्रदर्शित किया जाता है, "link /dump /symbols <filename>
" आप रक्तमय दे देंगे विवरण। लिस्टिंग पढ़ने में आसान बनाने के लिए शायद अन्य तरीके (या विकल्प) हैं।