2010-06-18 14 views
6

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

जब मैं डीबग (क्यूटी निर्माता में) प्रोग्राम चलाता हूं तो मैं मुख्य में ब्रेक पॉइंट सेट कर सकता हूं और फिर स्रोत कोड देख सकता हूं।

क्या केवल डीबग बाइनरी का उपयोग करके खोई गई सभी स्रोत फ़ाइल का पुनर्निर्माण करने का कोई तरीका है? या तो मैन्युअल रूप से या स्वचालित रूप से।

धन्यवाद!

+4

आप किसी और के द्वारा अपना स्रोत कोड खोना नहीं भूल सकते हैं। –

+1

@ हंस आप "किसी के" मध्यवर्ती परिवर्तन खो सकते हैं। हालांकि यह मूक है कि आप उन्हें क्यों चाहते हैं। –

+0

बिल्कुल हंस। किसी बिंदु पर, हम प्रोग्रामर द्वारा दिए गए एप्लिकेशन से संतुष्ट थे (बाइनरी डीबग)। हम उसे अपना कोड देने की उम्मीद कर रहे थे लेकिन उन्होंने नहीं किया। अब, दो हफ्ते बाद, प्रोग्रामर ने तारकीय परिवर्तनों से दूर अपने कोड को "बेहतर" किया (पढ़ें: बकवास कोड)। दुर्भाग्य से, हमारे पास उसके कंप्यूटर का बैकअप नहीं है। हमारे पास केवल द्विआधारी हैं ... –

उत्तर

10

जब मैं डीबग (क्यूटी निर्माता में) प्रोग्राम चलाता हूं तो मैं मुख्य में ब्रेक पॉइंट सेट कर सकता हूं और फिर स्रोत कोड देख सकता हूं।

वास्तव में? पता लगाएं कि आपका डीबगर कहाँ से स्रोत कोड प्राप्त कर रहा है, और इसे वहां से कॉपी करें।

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

आप मूल रूप से संकलित बाइनरी मूल स्रोत को पुन: उत्पन्न नहीं कर सकते हैं, क्योंकि सी ++ स्रोत से संकलित बाइनरी में परिवर्तन 1 से 1 संबंध नहीं है। कई (असीमित ...) विभिन्न स्रोत फाइलें हैं जो एक ही बाइनरी को संकलित करेंगे। मूल स्रोत जैसा दिखने वाला बाइनरी देखने से जानने का कोई तरीका नहीं है।

ऐसे उपकरण हैं जो सी ++ स्रोत फ़ाइल जैसा दिखते हैं, लेकिन संभावना से अधिक यह आपके मूल स्रोत की तरह कुछ भी नहीं दिखाई देगा।

+0

आप सही हैं। मैंने अपनी खुद की मशीन पर प्रोजेक्ट सोर्स कोड निर्देशिका का नाम बदल दिया और अब मैं केवल असेंबली कोड देखता हूं। धन्यवाद। –

+0

@TerryMahaffey: "ऐसे उपकरण हैं जो सी ++ स्रोत फ़ाइल जैसा कुछ उत्पन्न कर सकते हैं" क्या उन्हें प्राप्त करना संभव होगा? – user2284570

0

मुझे हाल ही में एक एमएसवीसी संकलित प्रोग्राम को असेंबलर को अपनाने के द्वारा पुनर्निर्माण करना पड़ा - कोई डीबग जानकारी नहीं, स्रोत ने इसे संस्करण नियंत्रण में भी नहीं बनाया। केवल एक चीज जिसने मुझे स्क्रैच से शुरू करने से बचाया था, पिछले एवी के लिए एपीआई के लिए एक उदाहरण ऐप का उपयोग कर पिछले देव था।

यदि आपके पास डीबग प्रतीक हैं तो आप कम से कम विधि नाम प्राप्त करने की उम्मीद कर सकते हैं।

मैं rec22 (recstudio.exe) (एक मुफ्त डाउनलोड के रूप में) decompiling के लिए मेरे सबसे अच्छे विकल्प हो पाया idaPro और hexrays लग रहा था यह बेहतर हो सकता है की तरह (लेकिन खरीदने के लिए बर्दाश्त नहीं कर सकता है)

0

से हैं "जब मैं डीबग में प्रोग्राम चलाता हूं (क्यूटी निर्माता में) मैं मुख्य में ब्रेक पॉइंट सेट कर सकता हूं और फिर स्रोत कोड देख सकता हूं।" आप वास्तव में मतलब है कि डीबगर के अंदर आप कोड के पुराने अच्छे संस्करण को देख सकते हैं, इसका मतलब है कि उस स्रोत की एक प्रति अभी भी कहीं भी झूठ बोल रही है कि डीबगर लेने में सक्षम है। फ़ाइलों को कहां से पता लगाने के लिए आपको डीबगर को ट्रेस करने में सबसे खराब स्थिति (सबसे खराब मामला) करने में सक्षम होना चाहिए।

यदि आपका मतलब यह नहीं है, तो मुझे सबसे अच्छा पता है कि डीबगर का उपयोग करके कुछ प्रकार के डिस्सेप्लर करने की कोशिश कर रहा है। परिवर्तनों की जटिलता के आधार पर असेंबली से स्रोत कोड का अनुमान लगाना संभव हो सकता है।

सामान्य रूप से डीबग बाइनरी को मूल स्रोत को फिर से बनाने में सक्षम होने के लिए डिज़ाइन नहीं किया गया है: यही स्रोत है। उनके पास प्रतीक तालिका और निर्देश-> लाइन नंबर मानचित्र हैं जो मदद करने में सक्षम हो सकते हैं।

-2

सभी ASCII बाइट निकालने के लिए strings प्रोग्राम का उपयोग करें, फिर उन्हें अनुमति दें।

1

मुझे लगता है कि वास्तव में स्रोत को पुनर्प्राप्त करने का एक छोटा सा मौका है, लेकिन बाइनरी से नहीं: यदि आप वास्तव में वास्तव में हताश हैं, तो आप एक खोज एप्लिकेशन (जैसे एजेंट रैनसैक) का उपयोग कर सकते हैं और स्ट्रिंग के लिए अपना पूरा ड्राइव खोज सकते हैं पैटर्न जो आप जानते हैं स्रोत कोड में मौजूद हैं। विशेष रूप से, यदि आपके पास एक है तो अपने पेजफाइल (pagefile.sys) में खोजें - वहां कुछ मौका हो सकता है जहां इसे कहीं कहीं दफनाया गया हो।

मैंने वास्तव में वास्तव में हताश होने पर इस विधि को आजमाया है, लेकिन मेरी स्थिति तब "खोज और पुनर्प्राप्ति" के लिए थोड़ा अलग और अधिक अनुकूल थी क्योंकि मैंने इसे खो दिया था जब किसी भी तरह आईडीई दुर्घटना और पूरी स्रोत फ़ाइल खो गई (!!!! बुरा आश्चर्य !!!)

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

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