2010-11-15 11 views
5

क्या मैं cll में प्रोग्रामेटिक रूप से dll लोड करके प्रोसेसर आर्किटेक्चर प्राप्त कर सकता हूं?मैं एक असेंबली डीएलएल के प्रोसेसर आर्किटेक्चर कैसे प्राप्त कर सकता हूं?

क्या कोई कक्षा है जो यह कर सकती है?

मैं dll मौसम प्राप्त करने की आवश्यकता x86, x64, MSIL आदि ..

उत्तर

1

विधानसभा लोड करके यह पता लगाने की कोशिश कर रहा एक चिकन और अंडे प्रस्ताव है। यदि आपको BadImageFormatException नहीं मिलता है तो आर्क उचित है और अब आप इसकी परवाह नहीं करते हैं। यदि आपको अपवाद मिलता है तो प्रोग्राम की कॉन्फ़िगरेशन गलत है। कोड में इसके बारे में आप कुछ नहीं कर सकते हैं।

+0

निश्चित रूप से जब तक आप का उपयोग 'ReflectionOnlyLoadFrom'। http://stackoverflow.com/q/9470199/103167 –

9

मान लीजिए कि आप केवल .NET असेंबली देख रहे हैं, आप छवि के शीर्षलेख को देखने के लिए CorFlags.exe का उपयोग कर सकते हैं।

This blog post परिणामों को पढ़ने का तरीका निर्धारित करने के लिए उपयोग बताता है। अंश:

उपयोग: Corflags.exe विधानसभा [विकल्प]

कोई विकल्प निर्दिष्ट रहे हैं, तो दिए गए छवि के लिए झंडे दिखाए गए हैं।

संस्करण:: .NET Redist जिसके साथ बाइनरी बनाया है के संस्करण शामिल हैं

...

यहाँ शीर्ष लेख के प्रत्येक घटक का मतलब है।

सीएलआर हैडर: 2.0 एक .NET 1.0 या .Net 1.1 (Everett) छवि इंगित करता है जबकि 2.5 .Net 2.0 (Whidbey) छवि इंगित करता है।

CorFlags: यह OR'g विशिष्ट झंडे देकर की गई है इंगित करने के लिए कि क्या छवि, ILONLY है अपने bitness आदि और लोडर द्वारा प्रयोग किया जाता है। ILONLY: प्रबंधित छवियों को मूल कोड रखने की अनुमति है। "Anycpu" होने के लिए एक छवि में केवल आईएल होनी चाहिए।

32 बिट: यहां तक ​​कि अगर आप एक छवि है कि केवल आईएल शामिल यह अभी भी मंच निर्भरता हो सकता है, 32 बिट झंडा "86" "anycpu" छवियों से छवियों भेद करने के लिए प्रयोग किया जाता है है। 64-बिट छवियों को तथ्य से अलग किया गया है कि उनके पास पीई प्रकार का पीई 32 + है।
सबसे दिलचस्प पहलू पीई और हेडर का 32 बीआईटी ध्वज है। ये असेंबली प्रकार निर्दिष्ट करने के लिए गठबंधन करते हैं।

  • anycpu: पीई = PE32 और 32 बिट = 0
  • 86: पीई = PE32 और 32 बिट = 1
  • 64-बिट: पीई = PE32 + और 32 बिट यहाँ वे तरह के लिए तरह दिखाई देंगे है = 0
+0

बेहतर क्या है: 1) असेंबलीनाम। प्रोसेसर आर्किटेक्चर, 2) CorFlags.exe (और पार्सर सी # - प्रक्रिया। स्टार्ट), 3) ApiChange https: //apichange.codeplex। कॉम/या 4) पीई रीडर http://stackoverflow.com/a/9767750/206730? – Kiquenet

+0

मैं वीएस 2008, वीएस 2010, वीएस 2012 और वीएस 2013 स्थापित करता हूं। मेरे पास सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट एसडीके \ विंडोज \ में उपफोल्डर में 8 फाइलें CorFlags.exe हैं। मुझे किस का उपयोग करना चाहिए? – Kiquenet

0

तुम भी एक FileStream का उपयोग कर विधानसभा फ़ाइल पढ़ सकते हैं। विंडोज निष्पादन योग्य फ़ाइलों का प्रारूप Microsoft pe/coff spec में निर्दिष्ट है। आप इसे यहाँ पढ़ सकते हैं:

http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx

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

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