हमारे पास कई डीएलएल फाइलों के साथ एक प्रोजेक्ट है जो एप्लिकेशन शुरू होने पर लोड हो जाता है। डीएलएल फाइलों के बेसड्रेस ओवरलैप करते हैं ताकि स्मृति छवि स्थानांतरित हो जाए। क्या बेसड्रेस को स्वचालित रूप से असाइन करने या प्रत्येक डीएलएल फ़ाइल के लिए "अच्छा" बेसड्रेस की गणना करने का कोई तरीका है?मैं/baseaddress को "अच्छे" मान पर कैसे सेट कर सकता हूं?
उत्तर
आप रिबेस उपयोगिता जो मंच SDK के साथ और दृश्य स्टूडियो के साथ जहाजों मैं DLLs का एक पूरी गुच्छा appliction
आप DLLs का एक सूची के साथ रिबेस आपूर्ति द्वारा लोड के आधार के पते को सेट करने के लिए लगता है का उपयोग कर सकते जो आपके प्रोग्राम को बनाते हैं, सिस्टम डीएलएस सहित नहीं, फिर यह सभी डीएलएल का डमी लोड करता है और उन्हें नए आधार पते निर्दिष्ट करता है।
यह अंतिम निर्माण चरण के हिस्से के रूप में किया जा सकता है।
में रिबेसिंग पर एक माइक्रोसॉफ्ट लेख आपको DLLs का वितरण कर रहे हैं नहीं है, भले ही कैसे आप अपने आधार पता सेट, वहाँ हमेशा एक जोखिम है कि अन्य नहीं DLLs आपके द्वारा लिखित पहले से ही उस पते पर लोड किया गया है (उदाहरण के लिए वैश्विक हुक डीएलएल)।
साथ ही यदि आप Vista के लिए निर्माण कर रहे हैं आप वास्तव में/DYNAMICBASE में किक करने ASLR सक्षम करने के लिए यहाँ का उपयोग करना चाहिए
MSDN लिंक है:। http://msdn.microsoft.com/en-us/library/bb384887.aspx।
मुझे पता चला कि मैं इसे पूरा करने के लिए केवल REBASE.EXE -d -b 0x60000000 * .dll को कॉल कर सकता हूं। – frast