6

क्या कोई पेपर किसी भी एल्गोरिदम/तकनीक का वर्णन किसी संकलित प्रोग्राम से subroutines को अनुमानित करने के लिए करता है? दूसरे शब्दों में: क्या प्रोग्राम में एक से अधिक बार दिखाई देने वाले कोड के ब्लॉक खोजने के लिए एक एल्गोरिदम है? इन ब्लॉकों में निर्देशों को फिर से व्यवस्थित किया जा सकता है (पाठ्यक्रम व्यवहार परिवर्तन के बिना) ताकि यह एक मैच ढूंढने की अधिक संभावना हो।सबराउटिन अनुमान

इस प्रक्रिया को कॉल से बचने के लिए कंपाइलर्स द्वारा किए गए सबराउटिन इनलाइनिंग के विपरीत के रूप में देखा जा सकता है, लेकिन बाइनरी आकार में वृद्धि।

ऐसा लगता है कि यह एक बहुत ही कठिन सैद्धांतिक समस्या है।

+0

शायद fenris http://lcamtuf.coredump.cx/fenris/whatis.shtml या कुछ अन्य रिवर्स इंजीनियरिंग टूलकिट करता है? – ninjalj

उत्तर

6

अच्छा, यह एक दिलचस्प समस्या है। लोग वास्तव में इस पर काम करते थे। एक त्वरित खोज रिटर्न इन दो:

लेकिन शायद कई और हैं। इन पुराने लोगों को संदर्भित करने वाले हालिया कागजात खोजने के लिए आप Google Scholar का उपयोग कर सकते हैं।

+0

"हम ग्राफ़-रंग पंजीकरण आवंटक के साथ संकलित कोड को संकुचित करते समय एक कुंजी संवर्द्धन के लिए" समान "के धारणा को ध्यान में रखते हुए इस मूल एल्गोरिदम को बढ़ाते हैं।" यह वही है जो मुझे दिमाग में था। आपको बहुत - बहुत धन्यवाद! – philix

3

जो आप खोज रहे हैं उसे "क्लोन डिटेक्टर" कहा जाता है। आप इसे स्रोत कोड, या ऑब्जेक्ट कोड पर कर सकते हैं। मुख्य विचार यह तय करना है कि आप किस भिन्नता को स्वीकार करना चाहते हैं।

आप read about our CloneDR क्लोन डिटेक्टर कर सकते हैं, जो स्रोत फ़ाइलों के सिंटैक्स पेड़ों की तुलना करके डुप्लीकेट कोड पाता है, सटीक और नज़दीकी मिस मैच ढूंढता है। यह सिर्फ एक स्रोत फ़ाइल के बजाय कई फ़ाइलों में करता है। यह "सामान्य subexpression" पहचान की तरह है, लेकिन यह घोषणाओं के साथ ही निष्पादन योग्य कोड पर काम करता है। जब मैच सटीक नहीं होता है, तो यह "subroutine" (abstraction) के पैरामीटर निर्धारित कर सकता है।

एल्गोरिदमिक विवरण के लिए Clone Detection Using Abstract Syntax trees पर मेरा पेपर देखें।

क्लोनरडर language-precise front end parsers का उपयोग करके कई भाषाओं के लिए ऐसा करता है।

साइट बताती है कि क्लोनरोड कैसे काम करता है, और क्लोनरोड की तुलना अन्य क्लोन पहचान उपकरण के साथ करता है।

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

-1

शायद यह गूंगा है .. लेकिन "diff" पर विचार करें। यह मूल रूप से इसका एक प्रतिबंधित संस्करण करता है।

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