वहाँ कि सी में / सी + + कोड एक निष्पादन योग्य कार्यक्रम बदलना होगा एक decompiler की कोई उम्मीद है?

यह अकसर किये गए सवाल का जवाब बॉब स्टाउट द्वारा स्निपेट्स से एक अंश है.

साँस रोकने मत करो. इसके बारे में सोचो ... एक decompiler के लिए ठीक से, या तो 1) हर संकलक काफी समान कोड उत्पन्न करने के लिए, पूर्ण अनुकूलन के भी साथ होता है, या चालू 2) यह हर संकलक का कोड जनरेटर का व्यक्तिगत उत्पादन पहचान करना होगा काम करने के लिए.

यदि पहला मामला सही हो रहे थे, वहाँ संकलक मानक के लिए कोई और अधिक की आवश्यकता के बाद से हर एक को एक ही काम होता होगा. दूसरे मामले के लिए कि हर नई संकलक रिलीज के साथ बदलने के लिए की थी बेहद जटिल कार्यक्रम में की आवश्यकता होगी सच करने के लिए.

तो क्या हुआ विशिष्ट compilers के लिए विशिष्ट decompilers - के बारे में एक decompiler केवल कोड, कहते हैं, ई.पू. + + 4,5 द्वारा उत्पन्न पर काम करने के लिए डिज़ाइन कहता है? यह सही वापस अनुकूलन जारी करने हमें मिलता है. कोड स्पष्टता के लिए लिखा और understandability अक्सर अक्षम है. कोड अधिकतम प्रदर्शन (गति या आकार) के लिए लिखा अक्सर गहरी है (सर्वोत्तम पर!) क्या यह सच है कि सभी आधुनिक compilers अनुकूलन स्विच के अनुकूलन तकनीकों जो सक्षम करने के लिए और कौन से बचने के लिए एक भीड़ को नियंत्रित करने के लिए जोड़ें. नीचे पंक्ति है कि, एक यथोचित बड़े, जटिल स्रोत मॉड्यूल के लिए, आप बस अपने मॉड्यूल अनुकूलन स्विच बदलकर, तो आपके decompiler भी जो automagically पहचान कर सकते हैं एक deoptimizer होना होगा अलग वस्तु की एक संख्या उत्पन्न करने के लिए संकलक मिल सकता है, जो अनुकूलन रणनीतियों समय संकलन में सक्षम थे.

के आगे और सरल है कि आप केवल एक विशिष्ट संकलक का समर्थन करना चाहते हैं और आप सबसे तार्किक स्रोत कोड के लिए अनुकूलन व्याख्या करने की कोशिश कर के बिना decompile चाहते निर्दिष्ट करते हैं. फिर क्या? एक अच्छा अनुकूलक और पर्याप्त है, तो क्या आप अपने decompiler का होगा, केवल गहरी नहीं बाहर निकलना है, लेकिन आपके कोड के internals फिर से लिखना होगा सकते हैं कई मामलों में, गोटो बयानों और अन्य, नहीं अच्छा कोडन अभ्यास के साथ riddled है. इस बिंदु पर, आप स्रोत decompiled है, पर क्या अच्छा है?

यह भी ध्यान स्रोत मॉड्यूल के लिए मेरी संदर्भ ध्यान दें. सी का एक लक्षण जब तक आसानी से maintainable स्रोत मॉड्यूल (. सी फ़ाइलें) में टूट गया है कि यह काफी हद तक अस्पष्ट हो जाती है. कैसे होगा कि साथ decompiler सौदा? यह या तो कुछ विशाल मुख्य () समारोह में पूरे कार्यक्रम decompile करने के लिए, सभी प्रतिरूपकता खोने की कोशिश कर सकते हैं, या यह अपने आप फ़ाइल में प्रत्येक बुलाया समारोह जगह करने की कोशिश कर सके. और निकम्मा अव्यवस्था उत्पन्न होता दूसरी समस्या में पड़ जाएगा पहला तरीका है, जहाँ कई कार्यों स्थैतिक डेटा और / या एक या अधिक कार्य करता है एक या अधिक बुला स्थिर कार्यों का उपयोग करने के साथ मूल स्रोत खड़ी रेखा से हटना फ़ाइलें. एक decompiler (जो पहले से ही) अस्वीकार्य होगा स्थैतिक डेटा और / या वैश्विक कार्यों पर व्यय या पठनीयता में ही कर सकता है.

अंत में, कि व्यावसायिक अनुप्रयोगों अक्सर कोडांतरक में जो लगभग एक असंभव सी बराबर में decompile को साबित कर सकता सबसे कठिन या समय महत्वपूर्ण कार्यों कोड याद है.

जैसा मैंने कहा, अपनी सांस रोक नहीं है. जैसा कि प्रौद्योगिकी जहां decompilers अधिक, optimizers संभव हो सकता है और भाषाओं के लिए (सी + + में सुधार, उदाहरण के लिए, सी के मुकाबले decompile करने के लिए एक काफी कठिन भाषा) ने भी उन्हें कम संभावना बनाने के लिए मिल जाना होगा.

वर्षों से यूनिक्स अनुप्रयोगों में स्रोत फार्म (मशीन पर नहीं पठनीय मानव - सभी टिप्पणियाँ और whitespace OOIIOIOI, आदि), जो लेखक के अधिकार की रक्षा के एक काफी पर्याप्त का मतलब हो गया है रूप में, चर नाम सभी हटाया डूबा वितरित कर दिया गया है. यह बहुत है कि decompiler निर्गम भी जितना पठनीय होगा संभावना नहीं है स्रोत डूबा.

अद्यतन: Decompiler प्रौद्योगिकी अभी भी बहुत है, लेकिन मुश्किल है क्योंकि यह लिखा था उल्लेखनीय प्रगति की गई है.

पढ़ो क्या एक decompiler है? Decompiler परियोजनाओं पर अद्यतन जानकारी के लिए.



शीर्ष 5 मुक्त नेटवर्किंग उपकरण

बुकमार्क वहाँ कि सी में / सी + + कोड एक निष्पादन योग्य कार्यक्रम बदलना होगा एक decompiler की कोई उम्मीद है?

नवीनतम ब्लॉग पोस्ट


अंग्रेजी अंग्रेजी जर्मन जर्मन स्पेनिश स्पेनिश फ्रेंच फ्रेंच इतालवी इतालवी पुर्तगाली पुर्तगाली रूसी रूसी डच् डच्
ग्रीक ग्रीक हिन्दी हिन्दी जापानी जापानी कोरियाई कोरियाई चीनी चीनी चीनी (सरलीकृत) चीनी (सरलीकृत) अरबी अरबी

कॉपीराइट 2009 टेक-FAQ. सभी अधिकार सुरक्षित. गोपनीयता नीति.