2009-04-18 17 views
10

कोई कैसे निर्धारित कर सकता है कि एक विशेष विंडोज निष्पादन योग्य या डीएलएल बनाने के लिए कौन सी सी या सी ++ कंपाइलर का उपयोग किया गया था? कुछ कंप्यूटर्स अंतिम निष्पादन योग्य में संस्करण तारों के पीछे छोड़ते हैं, लेकिन यह लिनक्स की तुलना में विंडोज पर दुर्लभ प्रतीत होता है।कौन सा कंपाइलर निर्धारित करता है एक Win32 पीई

विशेष रूप से, मुझे विजुअल सी ++ और विभिन्न मिनीजीडब्ल्यू कंपाइलर्स (आमतौर पर फ़ंक्शन हस्ताक्षर से काफी आसान) के बीच अंतर करने में रुचि है, और फिर विजुअल सी ++ संस्करणों (6, 2002/2003, 2005, 2008) के बीच और अधिक कठिन कर)। क्या वहां कोई उपकरण है जो अर्ध-भरोसेमंद तरीके से भेद कर सकता है?

+1

इस जानकारी की आवश्यकता के लिए आपको क्या चल रहा है? – ojblass

+0

सबसे पहले, यह सोचकर कि वीएस के किस संस्करण का उपयोग हमारे यहां मौजूद कुछ बाइनरी बनाने के लिए किया गया था। (मैं लगभग एक मुफ्त प्रदर्शन बढ़ावा के लिए वीएस के एक नए संस्करण के साथ पुनर्निर्माण के बारे में सोच रहा था।) मुझे किसी ऐसे व्यक्ति को मिला जो इन विशेष द्विआधारीओं के लिए उत्तर जानता है, लेकिन मुझे उत्सुकता है कि यह सामान्य रूप से किया जा सकता है। – kquinn

+0

किसी भी मामले में नवीनतम कंपाइलर का उपयोग करके पुनर्निर्माण करने के लिए उस मामले में जवाब नहीं है? या तो आप एक ही कंपाइलर का उपयोग करके पुन: संकलित करते हैं, कोई बदलाव नहीं करते हैं, या आप एक नए कंपाइलर का उपयोग करके समाप्त होते हैं, जिससे आपको बताए गए फायदे मिलते हैं। – jalf

उत्तर

1

विश्लेषण का हिस्सा है कि IDA-Pro प्रदर्शन में कुछ कंपाइलर मान्यता होती है। विश्लेषण के लिए पीई खोलने के बाद, आउटपुट लॉग देखें। यह आमतौर पर कहीं कहीं दफनाया जाता है। एक संकेत के कुलपति संस्करणों के बीच भेद करने के लिए

+0

हाँ, आईडीए प्रो 5.1 जो मैं अब उपयोग कर रहा हूं। इसका विश्लेषण बहुत अस्पष्ट है, हालांकि; कुछ मुझे पता है कि वीसी 6 के साथ संकलित किया गया था, यह कहता है "FLIRT हस्ताक्षर का उपयोग करना: माइक्रोसॉफ्ट विजुअलसी 2-8/नेट रनटाइम"। – kquinn

11

एक स्रोत विशिष्ट सी क्रम जुड़ा हुआ पुस्तकालय है। चूंकि डीएलएल से लिंक करने के लिए डिफ़ॉल्ट मामला (कम से कम आधुनिक संस्करणों में) है, यह करना काफी आसान है। यूटिलिटी Dependency Walker यह सत्यापित करने के लिए लगभग अनिवार्य है कि आप जानते हैं कि डीएलएल वास्तव में क्या लोड हो रहे हैं, और यह आपको बताएगा कि कौन सी सी रनटाइम डीएलएल उपयोग में है। यद्यपि निर्भरता वॉकर को माइक्रोसॉफ़्ट प्लेटफॉर्म एसडीके में शामिल किया गया है, लेकिन इसे स्वतंत्र रूप से बढ़ा दिया गया है और जिस साइट से मैंने लिंक किया है वह वर्तमान विकास का घर है।

VC6 और MinGW डिफ़ॉल्ट रूप से msvcrt.dll करने के लिए दोनों लिंक, तो यह उन दोनों के बीच भेद नहीं होंगे। कुछ प्रयासों के साथ, बाद में सी रनटाइम संस्करणों से लिंक करने के लिए मिनजीडब्लू भी बनाया जा सकता है, इसलिए आपको स्वतंत्र रूप से मिनजीडब्ल्यू को रद्द करने की आवश्यकता होगी।

Runtime  VC Version 
---------- ------------- 
MSVCRT.DLL VC6 
MSCVR80.DLL VC8 (VS 2005) 
MSCVR90.DLL VC9 (VS 2008) 

अन्य रनटाइम डीएलएल भी अच्छे संकेत होंगे, उदाहरण के लिए डेल्फी के रनटाइम के संदर्भ शायद इंगित करते हैं कि EXE वास्तव में डेल्फी से बनाया गया था, न कि सी टूलचेन बिल्कुल।

प्रतीकों .EXE फ़ाइल से छीन नहीं किया गया है, तो आप कुछ सुराग जहाँ से आंतरिक प्रतीकों मौजूद हैं मिल सकती है। उदाहरण के लिए, _sjlj_init जैसी किसी चीज़ का संदर्भ शायद इंगित करता है कि setjmp/longjmp अपवाद हैंडलिंग के लिए कॉन्फ़िगर किया गया एक मिनीजीडब्ल्यू जीसीसी 3.x कुछ बिंदु पर शामिल था।

+0

डांग! मुझे इससे हराएं! – shoosh

+0

ठीक है, संस्करणों की आपकी सूची * अधिक * है ... ;-) – RBerteig

+0

आह, एमएसवीसीआरटी.डीएलएल इसके साथ कोई संख्या नहीं है ... जो कुछ चीजें बताती है। निर्भरता वाकर के लिंक के लिए धन्यवाद, यह बहुत उपयोगी लग रहा है। काश मैं आप तीनों के बीच स्वीकार्य उत्तर बिंदुओं को विभाजित कर सकता हूं, लेकिन मैंने उन्हें 1 प्रतिनिधि के साथ लड़के को देने का फैसला किया। – kquinn

2

एक अन्य विकल्प का उपयोग कर depends.exe
MinGW और Cygwin अपने स्वयं के DLLs जो काफी पहचान करने के लिए स्पष्ट हैं के लिए क्या सीआरटी पुस्तकालय dll लिंक की जांच करने के लिए है।
VC6 msvcrt.dll का उपयोग करता है आमतौर पर
वी.एस. के किसी भी नए संस्करण अपने संस्करण dll के फ़ाइल नाम के आगे दिया गया है:
msvcr90.dll - VS2008
msvcr80.dll - VS2005
Msvcr71.dll - VS2003
MSVCR70। dll - VS2002

निश्चित गाइड के रूप में इस सूची मत लो के बाद से इन नामों अजीब बदलाव हो जाते हैं, विशेष रूप से VS2002-2003 के क्षेत्र में। एमएफसी और एटीएल डीएलएस जैसे अन्य डीएल भी हैं जिनके समान संस्करण योजना है।

यह रूप में लंबे समय के रूप में पीई वास्तव में CRT पर निर्भर करता है और यह यह करने के लिए स्थिर लिंक नहीं किया था काम करेंगे।

मुझे लगता है कि डेल्फी भी कुछ DLL उससे लिंक है, लेकिन मैं वास्तव में यकीन है कि यह क्या है नहीं कर रहा हूँ।

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