मेरे पास एक साधारण छोटा सवाल है जो कोई जानता है आसानी से जवाब देने में सक्षम होगा, मैंने Google की खोज की लेकिन जवाब नहीं मिला।क्या .dll फ़ाइलें प्रत्येक प्रोग्राम के लिए या एक बार सभी प्रोग्रामों के लिए लोड हो जाती हैं?
कंप्यूटर पर एक बार में कई प्रोग्राम चल रहे हैं, और मेरा सवाल यह है कि: जब कोई प्रोग्राम डीएलएल लोड करता है, तो क्या यह वास्तव में डीएलएल फ़ाइल लोड करता है या क्या यह स्मृति को मिलती है जिसमें डीएलएल पहले ही लोड हो चुका है? उदाहरण के लिए, wins2_32.dll (winsock 2) winsock का उपयोग करने वाले प्रत्येक प्रोग्राम के लिए लोड किया गया है, या यह एक बार लोड हो गया है और इसका उपयोग करने वाले सभी प्रोग्राम फ़ंक्शंस को कॉल करने के लिए समान स्मृति पते का उपयोग करते हैं?
ठीक है धन्यवाद, यह समझ में आता है। मुझे बस यह जानने की ज़रूरत है कि क्या डीएलएल से किसी फ़ंक्शन के लिए पॉइंटर उसी पते पर इंगित करता है जो फ़ंक्शन का उपयोग करने वाले सभी प्रोग्रामों द्वारा उपयोग किया जाता है। – Nilbert
उस प्रश्न का उत्तर "नहीं" है। फ़ंक्शन पॉइंटर्स प्रक्रियाओं में पते हैं * आभासी पता स्थान *, और यह निश्चित रूप से प्रक्रियाओं के बीच साझा नहीं किया जाता है। विभिन्न प्रक्रियाओं में विभिन्न पते पर एक डीएलएल लोड किया जा सकता है, और इसलिए फ़ंक्शन पॉइंटर का पता अलग-अलग होगा - भले ही एक ही भौतिक पृष्ठ का उपयोग किया जाए। –
वास्तव में, फ़ंक्शन के लिए दो अलग-अलग कार्यक्रमों में एक ही पते के लिए यह बेहद असंभव होगा। डीएलएल का कोड अगले कोड पता योगदान के बाद अगले उपलब्ध पता स्थान में मैप किया जाएगा। सिक्योर लिनक्स में लोड लोड एड्रेसिंग का उपयोग किया जाता है (वायरि को हमलों में हार्डकोडेड पतों का उपयोग करने से रोकने के लिए)। आप एक वायरस नहीं लिख रहे हैं, है ना? :-) – wallyk