2008-12-22 21 views
17

में निर्यात किए गए कार्यों के हस्ताक्षर प्राप्त करें क्या एक डीएलएल से निर्यात (सी शैली?) फ़ंक्शन के हस्ताक्षर (पैरामीटर गिनती/प्रकार, रिटर्न प्रकार) प्राप्त करना संभव है? मैं DLL Export Viewer के साथ फ़ंक्शन नाम, पते, ordinals, आदि की सूची देख सकता हूं लेकिन मैं हस्ताक्षर नहीं देख सकता। मेरे पास केवल डीएलएल फ़ाइल है और न तो .h nor .def फ़ाइलें नहीं हैं।एक डीएलएल

अद्यतन: एक उपकरण API Monitor कहा जाता है का उपयोग करना, मैं एक प्रक्रिया का उल्लेख dll का उपयोग करता है करने के लिए देते हैं और कार्यों के लिए कॉल देख सकते हैं। यह मुझे पैरामीटर की संख्या, वापसी मूल्य और उनके पूर्णांक मान (पॉइंटर्स?) देखने देता है लेकिन इससे बहुत मदद नहीं मिलती है। मुझे शायद यह निर्धारित करने का एक तरीका मिलना चाहिए कि कॉल पॉइंट पर उन पॉइंटर्स किस प्रकार की संरचनाएं इंगित कर रहे हैं।

उत्तर

3

सी ++ में, फ़ंक्शन हस्ताक्षर एक संकलक-निर्भर तरीके से नाम में "mangled" हैं। यह सी में नहीं होता है। इसलिए, यदि आपके पास आपके डीएलएल में सी फ़ंक्शन हैं, तो आपको असंगत नाम दिखाई देंगे। यदि यह एक सी ++ है, तो आप उलझन वाले लोगों को देखेंगे।

सी ++ को अलग-अलग हस्ताक्षरों के साथ अधिभारित कार्यों को हल करने की अनुमति देने के लिए उलझन वाले नामों की आवश्यकता होती है।

मुझे नहीं लगता कि आपके लिए "सी" डीएलएल से फ़ंक्शन सिंगरचर प्राप्त करने का कोई तरीका है। वे बस उपस्थित नहीं हैं।

3

सी कार्यों के लिए, यह जानकारी डीएलएल में बिल्कुल संग्रहित नहीं है। एकमात्र चीज जो मैं सुझा सकता हूं वह है कि फ़ंक्शन को अलग करना और देखें कि यह स्टैक पर चर के साथ कैसे इंटरैक्ट करता है और फिर हस्ताक्षर निर्धारित करने का प्रयास करता है।

शुभकामनाएं!

17

डीएलएल उनके द्वारा निर्यात किए गए कार्यों के हस्ताक्षर संग्रहित नहीं करते हैं। अन्य उत्तरों ने सी ++ का उल्लेख किया है, और जब सी ++ फ़ंक्शन को को C++ के रूप में निर्यात किया जाता है, तो नाम वास्तव में उलझा हुआ होगा। इसे सही कंपाइलर की मैंगलिंग योजना के साथ विचलित करें, और आपके पास हस्ताक्षर होगा। लेकिन अधिकांश डीएलएल अपने सी ++ नामों का उपयोग कर सी ++ फ़ंक्शंस निर्यात नहीं करते हैं। इसके बजाए, एक डीएलएल निर्यात करने का विकल्प सी-स्टाइल नामों का उपयोग करके निर्यात किया जाता है, इसलिए यदि डीएलएल सी ++ में लिखा गया था, तो निर्यात किए गए कार्यों में अभी भी कोई हस्ताक्षर जानकारी नहीं होगी।

आपके पास हेडर नहीं है? ज्यादातर विक्रेताओं में उनके एसडीके में ऐसी चीज शामिल होती है। अगर आपको कोई नहीं मिला, तो विक्रेता से शिकायत करें। यदि आपको एक प्राप्त नहीं करना था, तो हो सकता है कि आप अपने काम को गलत तरीके से जा रहे हों; क्या आप वाकई उस डीएलएल का उपयोग करना चाहते हैं?

यदि आपके पास हेडर फ़ाइल नहीं है, तो आप अपने आप से यह भी पूछ सकते हैं कि कानूनी रूप से, आपके प्रोग्राम में डीएलएल का उपयोग करने के लिए आपको वास्तव में अनुमति है या नहीं। यदि यह आपके सिस्टम पर केवल एक मनमानी डीएलएल है, तो यदि आप इसके लिए कोड लिख सकते हैं, तो संभवतः आपको अपने प्रोग्राम को शिप करते समय इसे फिर से वितरित करने की अनुमति नहीं है।

+0

आप अपने अंक पर बिल्कुल सही हैं :) – huseyint

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