LLMs as Idiomatic Decompilers: Recovering High-Level Code from x86-64 Assembly for Dart
यह शोध पत्र प्रदर्शित करता है कि सिंथेटिक समान-भाषा डेटा के साथ संवर्धित छोटे, विशिष्ट LLMs प्रभावी रूप से x86-64 असेंबली को पठनीय, इडियोमैटिक डार्ट (Dart) कोड में डीकंपाइल कर सकते हैं, जो बहुत बड़े मॉडलों के तुलनीय प्रदर्शन प्राप्त करते हैं और स्विफ्ट (Swift) जैसी संबंधित भाषाओं से प्रभावी क्रॉस-लिंगुअल ट्रांसफर के लिए एक क्षमता सीमा को प्रकट करते हैं।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आपको एक पुरानी, धूल भरी किताब मिलती है जो एक गुप्त कोड (मशीन कोड/असेंबली) में लिखी गई है। आप इसे पढ़ना चाहते हैं, लेकिन इसे समझने का एकमात्र तरीका इसे एक आधुनिक भाषा जैसे कि Dart (एक भाषा जिसका उपयोग ऐप्स बनाने के लिए किया जाता है) में अनुवादित करना है।
पारंपरिक रूप से, कंप्यूटर इस अनुवाद में बहुत खराब रहे हैं। वे एक कठोर शब्दकोश की तरह काम करते हैं जो गुप्त कोड को "Variable 1," "Variable 2," और "Do Stuff" जैसे सामान्य लेबल में बदल देता है। यह तकनीकी रूप से सही है, लेकिन इसे पढ़ना या समझना किसी इंसान के लिए असंभव है।
यह शोध पत्र इस बारे में है कि एक छोटे, स्मार्ट AI को एक बहुत बेहतर अनुवादक बनने के लिए कैसे सिखाया जाए। यहाँ उन्होंने जो किया, उसका सरल विवरण दिया गया है।
1. लक्ष्य: "रोबोट की भाषा" से "इंसानी कहानी" तक
शोधकर्ता चाहते थे कि वे x86-64 assembly (वह कच्चा, अव्यवस्थित निर्देश जिसे कंप्यूटर का CPU वास्तव में चलाता है) को वापस Dart कोड (साफ, पठनीय कोड जिसे एक मानव डेवलपर लिखता है) में बदल सकें।
असेंबली को बिखरे हुए लेगो (Lego) ब्रिक्स के ढेर के रूप में सोचें। लक्ष्य उन्हें वापस जोड़कर एक सुंदर, पहचानने योग्य महल बनाना है। समस्या क्या है? अधिकांश AI अनुवादक केवल ब्रिक्स को बेतरतीब ढंग से चिपका देते हैं। वे ऐसा AI चाहते हैं जो जानता हो कि एक महल कैसा दिखना चाहिए।
2. सीक्रेट सॉस: AI को सिखाने के दो तरीके
शोधकर्ताओं के सामने एक समस्या थी: उनके पास AI को ठीक से सिखाने के लिए Dart कोड के पर्याप्त उदाहरण नहीं थे। इसलिए, उन्होंने दो अलग-अलग "ट्यूटरिंग रणनीतियों" का परीक्षण किया:
- रणनीति A (शुद्ध Dart ट्यूटर): उन्होंने AI को Dart कोड और उसके संबंधित असेंबली के हजारों उदाहरण दिए। उन्होंने अन्य AI का उपयोग करके नए अभ्यास प्रश्न (सिंथेटिक डेटा) भी बनाए ताकि छात्र को अधिक होमवर्क दिया जा सके।
- रणनीति B ("कजिन" ट्यूटर): उन्होंने सोचा, "Dart, Swift (एक अन्य लोकप्रिय ऐप भाषा) के बहुत समान है। शायद यदि हम AI को Swift भी सिखाएं, तो यह अवधारणाओं को तेज़ी से सीख लेगा?" यह किसी को फ्रेंच सिखाने के लिए स्पेनिश भी सिखाने जैसा है, इस उम्मीद में कि समानताएं मदद करेंगी।
3. बड़ी खोज: आकार मायने रखता है!
यह इस शोध पत्र का सबसे दिलचस्प हिस्सा है। उन्होंने इसे दो अलग-अलग आकार के AI "मस्तिष्क" पर टेस्ट किया: एक छोटा (4 बिलियन पैरामीटर्स) और एक मध्यम (8 बिलियन पैरामीटर्स)।
- छोटा मस्तिष्क (4B): जब उन्होंने इसे दोनों Dart और Swift सिखाने की कोशिश की, तो यह भ्रमित हो गया। यह एक बच्चे को एक ही समय में फ्रेंच और स्पेनिश सिखाने जैसा था; भाषाएं आपस में मिल गईं और बच्चे ने गलतियां कीं।
- परिणाम: छोटा मस्तिष्क तब सबसे अच्छा काम करता था जब इसने केवल Dart का अध्ययन किया। Swift को जोड़ने से वास्तव में यह और खराब हो गया।
- मध्यम मस्तिष्क (8B): यह मस्तिष्क भ्रम को संभालने के लिए पर्याप्त बड़ा था। यह Swift और Dart को देख सकता था, उनके बीच की समानता को समझ सकता था, और कह सकता था, "आहा! दोनों 'ऑप्शनल टाइप्स' का उपयोग करते हैं!"
- परिणाम: मध्यम मस्तिष्क दोनों भाषाओं का अध्ययन करने पर बहुत बेहतर हो गया।
सबक: एक "टिपिंग पॉइंट" (क्षमता सीमा) होता है। यदि AI बहुत छोटा है, तो भाषाओं को मिलाना उसे नुकसान पहुँचाता है। यदि वह पर्याप्त बड़ा है, तो भाषाओं को मिलाना उसे तेज़ी से सीखने में मदद करता है।
4. परिणाम: छोटा लेकिन शक्तिशाली
शोधकर्ताओं ने कुछ अद्भुत पाया:
- उन्होंने एक बहुत छोटे AI (4B पैरामीटर्स) को केवल 1.5 घंटे के लिए एक सिंगल ग्राफिक्स कार्ड पर प्रशिक्षित किया।
- इस नन्हे AI ने ऐसा Dart कोड बनाया जो एक विशाल AI (480B पैरामीटर्स) के लगभग बराबर अच्छा था, जो कि उससे 120 गुना बड़ा है और जिसे चलाने के लिए एक विशाल सुपरकंप्यूटर की आवश्यकता होती है।
- नन्हे AI ने केवल ऐसा कोड नहीं बनाया जो काम करता था; बल्कि इसने ऐसा कोड बनाया जो इडियोमैटिक (idiomatic) था। इसने उचित वेरिएबल नाम (जैसे
v1के बजायuserList) का उपयोग किया और Dart डेवलपर्स के स्टाइल नियमों का पालन किया।
5. कमी (सीमाएं)
शोध पत्र ने कुछ खामियों को स्वीकार किया है, जैसे एक छात्र द्वारा थोड़ा नकल करने की बात स्वीकार करना:
- "ऑप्टिमाइज़ेशन" का अंतर: उनके द्वारा उपयोग किए गए Dart के उदाहरण "सुपर-ऑप्टिमाइज़्ड" (जैसे रेस कार का इंजन) थे, लेकिन Swift के उदाहरण "अन-ऑप्टिमाइज़्ड" (जैसे एक पारिवारिक सेडान कार) थे। इसने तुलना को थोड़ा कठिन बना दिया।
- क्या यह कंपाइल होता है, लेकिन क्या यह काम करता है? उन्होंने जांचा कि क्या कोड को कंपाइल (एक प्रोग्राम में बदलना) किया जा सकता है, लेकिन उन्होंने पूरी तरह से यह जांच नहीं किया कि प्रोग्राम तार्किक रूप से बिल्कुल सही काम करता है या नहीं। यह एक वाक्य की व्याकरण संबंधी शुद्धता की जांच करने जैसा है, लेकिन यह नहीं देखना कि कहानी का अर्थ निकलता है या नहीं।
निष्कर्ष
यह शोध पत्र सिद्ध करता है कि आधुनिक ऐप्स को रिवर्स-इंजीनियर करने के लिए आपको सुपरकंप्यूटर की आवश्यकता नहीं है। एक छोटा, विशिष्ट AI, जिसे थोड़े समय के लिए प्रशिक्षित किया गया है, एक पेशेवर अनुवादक की तरह कार्य कर सकता है, जो बिखरे हुए मशीन कोड को वापस साफ, पठनीय मानव कोड में बदल सकता है।
यह एक छोटे, स्मार्ट प्रशिक्षु को एक विशिष्ट, केंद्रित पुस्तक पढ़ने के लिए देने जैसा है, बजाय इसके कि एक विशाल, महंगी लाइब्रेरी को काम पर रखा जाए जिसे पढ़ने के लिए किसी के पास समय नहीं है। पहली बार, हमारे पास बिना किसी बड़े बजट के आधुनिक मोबाइल ऐप्स के "गुप्त कोड" को समझने का एक व्यावहारिक तरीका है।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।