यदि आप कुछ औपचारिक गारंटी की तलाश में हैं, तो मैं आपकी सहायता नहीं कर सकता। आपको उस कंपाइलर और ओएस के दस्तावेज़ीकरण को देखना होगा जिसका आप उपयोग कर रहे हैं - हालांकि मुझे संदेह है कि आपको आवश्यक गारंटी मिल जाएगी - संभवतः कुछ विशेष एम्बेडेड सिस्टम ओएस के लिए।
हालांकि मैं आपको एक परिदृश्य प्रदान कर सकता हूं जहां मैं 99 वर्ष का हूं।99% यकीन है कि यह बिना किसी समस्या के काम करेगा:
- विंडोज
- 32 बिट प्रक्रिया
- समारोह एक मॉड्यूल स्थानांतरण जानकारी
- प्रश्न में मॉड्यूल नहीं है में स्थित है पहले से ही भरा हुआ है & ग्राहक के पक्ष
- प्रश्न में मॉड्यूल दोनों पक्षों पर 100% समान है पर प्रारंभ
- एक संकलक है कि बहुत पागल सामान नहीं करता है (उदाहरण के लिए MSVC और जीसीसी दोनों ठीक होना चाहिए)
यदि आप एक डीएलएल में कोई फ़ंक्शन कॉल करना चाहते हैं तो आप समस्याओं में भाग ले सकते हैं। मॉड्यूल (= डीएलएल) के ऊपर की सूची के अनुसार स्थानांतरण स्थान नहीं हो सकता है, जो निश्चित रूप से इसे स्थानांतरित करना असंभव बनाता है (जो हमें चाहिए)। दुर्भाग्य से इसका मतलब यह भी है कि डीएलएल लोड करना असफल हो जाएगा, अगर किसी अन्य चीज़ द्वारा "पसंदीदा लोड पता" का उपयोग किया जाता है। तो यह तरह का जोखिम भरा होगा।
यदि फ़ंक्शन EXE में रहता है, तो आपको ठीक होना चाहिए। 32 बिट EXE को स्थानांतरण जानकारी की आवश्यकता नहीं है, और अधिकांश इसमें शामिल नहीं हैं (एमएसवीसी डिफ़ॉल्ट सेटिंग्स)। बीटीडब्लू: एएसएलआर यहां से कोई मुद्दा नहीं है क्योंकि एएसएलआर केवल उन मॉड्यूल को स्थानांतरित करता है जिन्हें स्थानांतरित करने के इच्छुक के रूप में टैग किया जाता है और बी) एएसएलआर स्थानांतरण के बिना 32 बिट विंडोज मॉड्यूल को स्थानांतरित नहीं कर सकता है, भले ही वह चाहें।
उपरोक्त में से अधिकांश केवल यह सुनिश्चित करता है कि फ़ंक्शन दोनों तरफ एक ही पता होगा। एकमात्र शेष प्रश्न - कम से कम मैं सोच सकता हूं - है: क्या यह एक पॉइंटर के माध्यम से एक फ़ंक्शन को कॉल करना सुरक्षित है जिसे हमने नेटवर्क से प्राप्त कुछ बाइट्स पर memcpy-ing द्वारा प्रारंभ किया है, मानते हैं कि बाइट-पैटर्न वही है कि अगर हम वांछित कार्य का पता ले चुके हैं तो हम मिलेंगे? यह निश्चित रूप से ऐसा कुछ है जो सी ++ मानक गारंटी नहीं देता है, लेकिन मुझे वर्तमान वास्तविक दुनिया के किसी भी वास्तविक दुनिया की समस्याओं की उम्मीद नहीं है।
कहा जा रहा है कि, मैं ऐसा करने की अनुशंसा करता हूं, ऐसी स्थितियों को छोड़कर जहां सुरक्षा और मजबूती वास्तव में महत्वपूर्ण नहीं है।
स्रोत
2012-10-25 00:11:36
अच्छे या बुरे विचार के बावजूद, यह काम नहीं करेगा। यहां तक कि [एएसएलआर] के बिना भी (http://en.wikipedia.org/wiki/Address_space_layout_randomization), आपको हमेशा भाग्यशाली होना होगा कि सूचक हमेशा एक ही पता हो। एएसएलआर के साथ, आप बहुत अधिक गारंटी देते हैं कि यह कभी नहीं होगा। –
नहीं। एन्क्रिप्शन के बिना नेटवर्क पर कुछ भी सुरक्षित नहीं है। कुछ प्रकार के वादे के बिना कॉलिंग फ़ंक्शंस यह काम करेगा (क्योंकि पॉइंटर * आपको * ले जाएगा) सुरक्षित नहीं है। प्रोटोकॉल का प्रयोग करें। – Incognito
चिंता न करें, मैं ऐसा करने वाला नहीं हूं, मैं बस सोच रहा हूं कि यह संभव है और किस परिस्थिति में। – Jack