2010-06-03 13 views
8

बस उत्सुक, मुझे बताया गया था कि डीएलएल फाइलों के साथ, आप इसका उपयोग करने वाले पूरे एप्लिकेशन को पुन: संकलित किए बिना डीएल में संशोधन कर सकते हैं। दूसरी ओर। Lib फ़ाइलों को संकलित करने की आवश्यकता है ताकि कोड एप्लिकेशन के रूप में एक से जुड़ा हो।क्या डीएलएल कभी भी मशीन कोड में बदल जाता है?

तो मुझे पता है कि .lib फ़ाइलें मशीन कोड में बदल दी गई हैं। लेकिन डीएल के बारे में क्या ?? क्या वे आवेदन के निष्पादन पर मशीन कोड में बदल गए हैं ??

यदि संभवतः सही उपयोग नहीं किया जाता है तो यह संभवतः आसान हैकिंग का कारण बन सकता है।

+0

'objdump -x somefile.dll> dllinfo.txt' को आजमाएं और DLL –

+0

की गड़बड़ी की जांच करने के लिए dllinfo.txt पढ़ें I इस तरह "हैकिंग" के बारे में चिंता नहीं करेंगे - आप बस निष्पादन योग्य को आसानी से बदल सकते हैं एक डीएलएल की जगह के रूप में। किसी भी तरह से, आपको मशीन पर मनमानी कोड की प्रतिलिपि बनाने की अनुमति की आवश्यकता है और उपयोगकर्ता इसे चलाता है। बहुत यकीन है कि एमएस ने पहले से ही इस बारे में सोचा है :) – Peter

+0

यदि आपको लगता है कि कोड को चलाने वाले व्यक्ति द्वारा कोड को बदला जा सकता है, तो आप बेहतर ढंग से अपने सभी कोड को ठीक कर देंगे, जिनकी सुरक्षा उस धारणा पर निर्भर करती है ... –

उत्तर

11

डीएलएस अभी भी मशीन कोड हैं। वे रन टाइम (इसलिए तब नाम) पर गतिशील रूप से जुड़े हुए हैं (यदि आप फ़ंक्शन हस्ताक्षर नहीं बदलते हैं) तो इसे बदलने के बाद आपको अपने मुख्य प्रोग्राम को पुन: कंपाइल करने की आवश्यकता नहीं है। एक स्थिर पुस्तकालय शारीरिक रूप से आपके निष्पादन योग्य का हिस्सा है, यही कारण है कि वहां परिवर्तनों को एक पुन: संकलन (या वास्तव में, एक रिलिकंक) की आवश्यकता होती है।

7

डीएलएल संकलित मशीन कोड युक्त है। अंतर यह है कि ओईजे और एलआईबी फाइलों के बीच (पारंपरिक) लिंक समय के बजाय, एप्लिकेशन EXE और DLL के बीच लिंक रनटाइम पर किया जाता है।

4

एक डीएलएल में आमतौर पर मशीन कोड होता है। मुद्दा यह नहीं है कि आप डीएलएल को संशोधित कर सकते हैं क्योंकि यह स्रोत कोड है, लेकिन आप स्रोत कोड को डीएलएल, फिर से संकलित और पुनः लिंक करने के लिए संशोधित कर सकते हैं, और जब तक इंटरफ़ेस समान रहता है, तो आप कर सकते हैं पुराने डीएलएल को एक नए से प्रतिस्थापित करें, और बाकी का एप्लीकेशन पुराने के बजाय नए का उपयोग कर सकता है।

असल में, यह अक्सर समस्या का कारण बनता है, जैसे कोड पुराने डीएलएल में एक बग पर पर निर्भर करता है। जब/यदि आप एक संस्करण बनाते हैं जो बग को हल करता है, तो यह एप्लिकेशन को तोड़ देता है। कई उदाहरणों के लिए Google "डीएलएल नरक" के लिए।

+0

आप बस जितना जल्दी हो उतना जल्दी हो! मैं "डीएलएल नरक" समस्याओं और इसे हल करने के तरीकों के बारे में जानकारी जोड़ना चाहता था। इंटरफेस, COM और कुछ .NET प्रतिमानों को पेश करने का मुख्य कारण "डीएलएल हेल" की समस्याओं को हल करने के विभिन्न तरीकों से था। – Oleg

1

बस डालें: डीएलएल को बाद में संकलन के बाहर बदल दिया जा सकता है क्योंकि वे आपके exe से शारीरिक रूप से अलग हैं। दूसरी तरफ, लिब और ओबीजे फाइलें आपके exe में संकलित हैं, ताकि उन्हें अपडेट करने के लिए आपके ऐप को फिर से सम्मिलित करने की आवश्यकता हो।

डीएल प्रभावी ढंग से exes हैं जो मुख्य() परिभाषित नहीं करते हैं।

0

जब एक डीएलएल मुख्य कार्यक्रम से जुड़ा होता है, केवल इंटरफ़ेस, यानी कक्षाएं, कार्य आदि। यह निर्यात उनके हस्ताक्षर से जुड़े होते हैं। डीएलएल के अंदर वास्तविक मशीन कोड केवल रनटाइम पर लोड होता है, संकलन समय पर नहीं; यही कारण है कि आप अपने ऐप को केवल डीएलएल के lib के साथ बना सकते हैं, और वास्तविक डीएलएल डाल सकते हैं जहां आप इसे चाहते हैं (उदाहरण के लिए कुछ साझा डीएलएल फ़ोल्डर या जो भी हो)।

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

क) स्थिर जोड़ने के लिए libs:

हिस्सा यहाँ (संभवतः) भ्रमित वहाँ प्रभावी रूप से उदारीकरण फ़ाइलों के दो प्रकार हैं कि है। ये अपने सभी संकलित कोड को सीधे मुख्य ऐप में डाल देते हैं, और परिणामी .exe फ़ाइल का एक निश्चित हिस्सा हैं।

बी) गतिशील लिंकिंग के लिए libs।इनमें वास्तविक कोड वाले डीएलएल के लिए एक इंटरफेस होता है, जो केवल ऐप के लिए रनटाइम पर उपलब्ध होना चाहिए (और यदि यह नहीं है, तो यह शुरू नहीं होगा, और बस आपको बताएगा कि कौन सी डीएलएल नहीं मिल सका)।

बीटीडब्ल्यू: आपको यह निर्दिष्ट करने की ज़रूरत नहीं है कि आप किस लिब से लिंक करते हैं, यह किस प्रकार है, यह स्वचालित रूप से करता है।

इसके अलावा: कुछ अनुप्रयोग कुछ बाहरी वातावरण के अंदर चलाने के लिए डीएलएल के रूप में बनाए जाते हैं। उदाहरण के लिए, वेबसाइटों को एक विशिष्ट इंटरफ़ेस के साथ डीएलएल के रूप में कार्यान्वित किया जाता है, जो को अपाचे/आईआईएसएपीआई/जो भी सर्वर द्वारा चलाया जा रहा है। यह उपर्युक्त प्लगइन-सिस्टम के समान ही काम करता है, लेकिन यहां प्रत्येक डीएलएल प्रभावी ढंग से एप्लिकेशन है।

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