यह मुझे परेशान कर रहा है कि .NET में "AnyCPU" सुविधा कैसे काम करती है: यह निष्पादन योग्य को मूल 32 के रूप में लोड करता है यदि सिस्टम 32-बिट है, और 64-बिट के रूप में यदि सिस्टम 64-बिट है (जिसे आप आसानी से कार्य प्रबंधक के साथ पुष्टि कर सकते हैं)। तो जाहिर है, यह असंभव नहीं है।विंडोज के लिए एक क्रॉस-प्लेटफार्म (32-बिट और 64-बिट संगत) प्रोग्राम लिखना (जैसे .NET में AnyCPU)
सवाल यह है कि माइक्रोसॉफ्ट ने यह कैसे किया? विंडोज मूल रूप से .NET ढांचे के बारे में नहीं जानते थे, इसलिए विंडोज पीई लोडर सीएलआर हेडर के लिए पीई हेडर में किसी भी अतिरिक्त विशेषताओं की तलाश नहीं कर सकता है; यह सुविधा कुछ प्रकार के कर्नेल-मोड एक्सटेंशन द्वारा जोड़ा जाना चाहिए। लेकिन .NET ढांचा ऐसी कोई चीज़ स्थापित नहीं करता है ... मैं एक ही समय में एक ही निष्पादन योग्य देशी 32-बिट और 64-बिट कैसे हो सकता है, इस पर पूरी तरह से नुकसान हो रहा है, खासकर mscoree.dll के disassembly के बाद से अनियंत्रित देशी कार्यों के संदर्भ भी नहीं दिखाते हैं।
क्या किसी के पास यह कैसे किया गया है इस बारे में कोई ज्ञान और/या उचित अनुमान है? यह स्पष्ट रूप से संभव है (ताकि जैसा कोई कह बातें "यह संभव नहीं है"), और यह मुझे एक देशी पार मंच EXE लिखने के लिए कोशिश करना चाहता हूँ बनाता है ...
संपादित करें:
के रूप में एक साइड नोट, इस बात पर विचार करें कि आप 64-बिट विंडोज पीई पर्यावरण में 32-बिट निष्पादन योग्य कैसे नहीं चला सकते हैं ... को मिला है ताकि कुछ प्रकार के "प्लगइन" के साथ पीई लोडर को विस्तारित या संशोधित किया जा सके। ?
कुछ प्रोग्राम (उदा। प्रोसेस एक्सप्लोरर्स) हैं जो यह मेरे 32-बिट निष्पादन योग्य वितरण करते हैं जो * यदि संभव हो तो * 64-बिट छवि लॉन्च करता है। जैसे एक "AnyCPU" निष्पादन योग्य है जो 32-बिट पीई के अलावा कुछ भी है? –
@pst: मैं उन लोगों से पूरी तरह से अवगत हूं, लेकिन नहीं, वे अलग हैं। किसी भी सीसीपीयू एक्जिक्यूटिव 64-बिट ओएस के शुरू होने के पल से 64-बिट होते हैं - वहां कोई अनपॅकिंग नहीं होती है और ऐसा कुछ भी नहीं है "चलो इस बाइट कोड को 64-बिट में जेआईटी करें और फिर 64-बिट प्रक्रिया को पुनरारंभ करें।" यही कारण है कि मुझे परेशान छोड़ देता है। – Mehrdad