2009-09-14 14 views
13

मुझे किसी फ़ोल्डर में कई डीएल और एक्सई फ़ाइलों को संसाधित करने की आवश्यकता है और यह निर्धारित करना है कि मैं किस प्रकार की फ़ाइल से निपट रहा हूं: .NET, COM, Win32 या कुछ अन्य विदेशी जीवन रूप।मैं एक डीएल के प्रकार का पता कैसे लगा सकता हूं? (COM, .NET, WIN32)

मुझे DLL के प्रकार का पता लगाने के लिए सबसे आसान तरीका निर्धारित करने के लिए कोशिश कर रहा है, क्या आप इस के बारे में सोच है:

  1. COM dll => मैं क्या एक LoadLibrary, तो GetProcAddress "DllRegisterServer" के लिए। अगर मुझे वैध वापसी मिलती है, तो यह एक COM फ़ाइल है।

  2. नेट dll => dll mscoree.dll यह हमेशा एक नेट dll है पर निर्भर करता है?

  3. Win32 dll => उपरोक्त दोनों परीक्षण में विफल रहते हैं, यह एक Win32 dll है?

निश्चित रूप से यह पता लगाने का एक बेहतर तरीका होना चाहिए कि हम किस प्रकार के डीएल से निपट रहे हैं। उपरोक्त बहुत गुंजाइश है, और EXE फ़ाइलों के लिए काम नहीं करेगा? ऐसा कुछ और तरीका होना चाहिए जिसके बारे में मैं सोच नहीं रहा हूं।

आदर्श रूप से मैं पार्सर को यह निर्धारित करने में सक्षम होना चाहता हूं कि फाइल किस संकलक के साथ संकलित की गई थी, और एमएफसी, एटल, एसएलएल आदि जैसे इसका उपयोग किस प्रकार किया जाता है ... लेकिन मुझे संदेह है कि प्री- प्रतिबिंब युग?

उत्तर

5

आपको इन फ़ाइलों के पीई हेडर की जांच करनी होगी। सभी डीएलएल और निष्पादन योग्य, Win32 और .NET, में एक पीई हेडर है।

An In-Depth Look into the Win32 Portable Executable File Format

The .NET File Format

Portable Executable

+0

अच्छा लिंक की वजह से इस जवाब को स्वीकार करना है। मूल्यवान टिप्पणियों के लिए अन्य पोस्टर के लिए धन्यवाद। –

1

मैं इसे करने का एक बेहतर तरीका नहीं दिख रहा। हालांकि, 2 पर, वास्तव में जवाब नहीं है। रनटाइम होस्ट लगभग निश्चित रूप से mscoree.dll पर भी निर्भर करेगा, और वे जरूरी नहीं हैं। नेट असेंबली।

.NET dlls में एक COM वर्णनकर्ता है, जिसे आप डंपबिन का उपयोग करके पा सकते हैं। मुझे नहीं पता कि कोड से यह जानकारी कैसे प्राप्त करें।

यदि आप .Net में प्रोग्रामिंग कर रहे हैं, तो यह निर्धारित करने का एक तरीका है कि असेंबली एक .NET असेंबली है जिसे असेंबली कॉल करने का प्रयास कर रहा है। लोडफ्रॉम (...)।

अच्छा, यह वास्तविक जवाब नहीं है, लेकिन चीजों की युक्तियों का एक सेट जो मैं देखता हूं।

+0

हाय, धन्यवाद। मैंने पहले "असेंबली लोड करने का प्रयास" दृष्टिकोण का उपयोग किया है - लेकिन ऐसा लगता है कि यह बहुत मुश्किल है? ऐसा लगता है कि मुझे पीई मार्ग पर जाने की जरूरत है। एक अच्छा पुन: प्रयोज्य घटक हो सकता है। मैं उम्मीद कर रहा था कि पुस्तकालयों में ऐसा करने के लिए एक छिपी हुई विशेषता थी, लेकिन अनुमान नहीं लगा। –

+0

हाँ, यह बहुत घबराहट लगता है ... yyucckckk! :-) सौभाग्य! –

4

DllRegisterServer आवश्यकता नहीं है, एक COM dll के लिए केवल आवश्यक निर्यात DllGetClassObject

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

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