इस सवाल का पहले से ही एक उत्तर है: < / P>
- 7 जवाब
मुझे लिखना है एक परीक्षा स्क्रिप्ट या प्रोग्राम जो दावा करता है कि दी गई निर्देशिका में सभी DLL फ़ाइलों को एक विशेष बिल्ड प्रकार की होती है।
मैं इसे एक एसडीके पर बिल्ड प्रक्रिया के अंत में एक विवेकपूर्ण जांच के रूप में उपयोग करने के लिए सुनिश्चित करूँगा कि 64-बिट संस्करण को किसी भी तरह से कुछ 32-बिट DLL फ़ाइलों को इसके अंदर और इसके विपरीत नहीं मिला है।
क्या एक DLL फ़ाइल को देखने और उसका प्रकार निर्धारित करने का एक आसान तरीका है?
समाधान xp32 और xp64 दोनों पर काम करना चाहिए।
गोर विवरण
एक DLL पीई निष्पादन योग्य प्रारूप का उपयोग करता है, और फ़ाइल के उस जानकारी को पढ़ने के लिए बहुत मुश्किल नहीं है। < / P>
एक सिंहावलोकन के लिए इसे देखें आपको एमएस-डॉस हेडर पढ़ना होगा, फिर संरचना पढ़ें। इसमें संरचना शामिल है जिसमें आपको मशीन सदस्य में आवश्यक जानकारी है जिसमें निम्न मानों में से एक है
- IMAGE_FILE_MACHINE_I386 (0x014c)
- IMAGE_FILE_MACHINE_IA64 (0x0200)
- IMAGE_FILE_MACHINE_AMD64 (0x8664)
यह जानकारी फ़ाइल में एक ऑफसेट ऑफसेट पर होनी चाहिए, लेकिन मैं अभी भी फाइल को पार करने और MS-DOS शीर्षलेख के हस्ताक्षर की जांच करने की सलाह देता हूं IMAGE_NT_HEADERS सुनिश्चित करने के लिए कि आप भविष्य के किसी भी बदलाव के साथ सामना करते हैं
हेडर पढ़ने के लिए छवि सहायता का उपयोग करें ...
आप ऐसा करने के लिए भी इसका उपयोग कर सकते हैं - साथ DLL लोड करें और आपको एक संरचना मिलेगी जिसमें एक पॉइंटर होगा IMAGE_NT_HEADERS संरचना LOADED_IMAGE को ImageUnload के साथ हटा दें।
... या किसी न किसी पर्ल स्क्रिप्ट का अनुकूलन करें
यहां पर असरदार पर्ल स्क्रिप्ट है, जो काम हो जाता है। यह जांचता है कि फाइल में डॉस हैडर है, फिर फाइल में IMAGE_DOS_HEADER 60 बाइट्स से पीई ऑफ़सेट पढ़ता है।
यह तब पीई भाग की शुरुआत करने का प्रयास करता है, हस्ताक्षर पढ़ता है और इसे चेक करता है, और तब उस मूल्य को निकालता है जिसमें हम रुचि रखते हैं।
#! / Usr / bin / perl # # use: ptype & lt; exefile & gt; # $ Exe = $ ARGV [0]; खुले (EXE, $ exe) या मर "$ exe खोल नहीं सकते: $!"; binmode (EXE); अगर (पढ़ें (EXE, $ doshdr, 64)) {($ जादू, $ skip, ऑफसेट ऑफसेट) = अनपैक ('a2a58l', $ doshdr); मरना ("निष्पादन योग्य नहीं") यदि ($ जादू ने 'एमजेड'); की तलाश (EXE, ऑफसेट $, SEEK_SET); अगर (पढ़ें (EXE, $ pehdr, 6)) {($ sig, $ skip, $ machine) = अनपैक ('a2a2v', $ pehdr); मरना ("कोई पीई निष्पादन योग्य नहीं") अगर ($ सिग ने 'पीई'); यदि ($ मशीन == 0x014c) {प्रिंट "i386 \ n"; } एल्सफ ($ मशीन == 0x0200) {प्रिंट "आईए 64 \ n"; } एल्सफ ($ मशीन == 0x8664) {प्रिंट "AMD64 \ n"; } अन्य {printf ("अज्ञात मशीन प्रकार 0x% एलएक्स \ n", $ मशीन); }}} बंद (एक्सई);
Comments
Post a Comment