
छोटा भाषा मॉडल जो stripped x86-64 बाइनरीज़ में फ़ंक्शन्स के नाम और विवरण देता है, साथ में एक खुला डेटासेट, बेसलाइन्स, और LoRA फ़ाइन-ट्यूनिंग प्रयोग।
अंग्रेज़ी · तुर्की
एक छोटा भाषा मॉडल जो एक स्ट्रिप्ड बाइनरी में एक फ़ंक्शन को देखता है और उसे एक सार्थक नाम और एक संक्षिप्त विवरण देता है।
v4 डेटासेट में 5 अनुकूलन स्तरों पर 341 परियोजनाओं के 228,177 फ़ंक्शन शामिल हैं और इसे Hugging Face पर v4 कॉन्फ़िग के अंतर्गत प्रकाशित किया गया है। Ghidra स्क्रिप्ट तैयार है। अब तक का सबसे अच्छा छोटा मॉडल, Qwen3-8B + LoRA जिसे v5 डेटा पर प्रशिक्षित किया गया (पहले विवरण, फिर नाम), निश्चित v4 परीक्षण नमूने पर नाम F1 0.124 और eval_115 पर 0.155 तक पहुँचता है; कॉल कॉन्टेक्स्ट वाला सबसे अच्छा बड़ा मॉडल उसी परीक्षण नमूने पर 0.167 स्कोर करता है। परिणाम, अनुभाग 6 देखें। मॉडल नाम के साथ-साथ एक अंग्रेज़ी और एक तुर्की एक-वाक्य विवरण लिखता है। एडाप्टर Hugging Face पर है: krxi123/asmsense-qwen3-8b-lora।
Ghidra या IDA में एक स्ट्रिप्ड प्रोग्राम खोलें और आपको FUN_00401a30 नाम के सैकड़ों फ़ंक्शन दिखाई देंगे। रिवर्स इंजीनियरिंग का अधिकांश भाग इन फ़ंक्शनों को एक-एक करके समझने और नाम देने में शामिल है। इस परियोजना का उद्देश्य एक मॉडल को वह पहला कदम सिखाना है:
input (stripped x86-64) target output
───────────────────────────── ──────────────────────────────────────────────
movzx eax, byte ptr [rsi] name: adler32_update
lea rdx, [rdi + rax] description: Computes the Adler-32 checksum
cmp rdx, 0xfff1 ← 65521 over the bytes of a buffer.
... # TR: Tampondaki baytlar üzerinden Adler-32
# sağlama toplamı hesaplar.
बड़े सामान्य-उद्देश्य वाले मॉडल इस कार्य को कुछ हद तक संभाल सकते हैं, लेकिन वे धीमे, महंगे और क्लाउड-होस्टेड हैं। लक्ष्य इस प्रश्न का उत्तर देना है:
क्या इस कार्य के लिए विशेष रूप से तैयार किए गए डेटा पर प्रशिक्षित एक छोटा मॉडल बड़े मॉडलों की बराबरी कर सकता है या उनसे भी बेहतर प्रदर्शन कर सकता है—जबकि लैपटॉप पर चल रहा हो?
एक ही परीक्षण सेट पर तीन स्तरों का मूल्यांकन किया जाता है:
| स्तर | मॉडल | भूमिका |
|---|---|---|
| सीमा | बड़े ओपन मॉडल (DeepSeek, GLM, MiMo, Gemma, Qwen) | ऑफ-द-शेल्फ मॉडलों के साथ वर्तमान में प्राप्त करने योग्य सर्वश्रेष्ठ |
| आधाररेखा | छोटा ओपन मॉडल, फाइन-ट्यूनिंग से पहले | प्रारंभिक बिंदु |
| यह परियोजना | वही छोटा मॉडल + इस डेटासेट पर LoRA | परियोजना का योगदान |
डेटा निर्माण (cikar.py): ओपन-सोर्स C परियोजनाओं को विभिन्न अनुकूलन स्तरों (-O0, -O2) पर x86-64 के लिए संकलित किया जाता है। प्रत्येक फ़ंक्शन के लिए असेंबली निकाली जाती है। ग्राउंड ट्रुथ—मूल फ़ंक्शन का नाम—सीधे स्रोत से आता है, इसलिए किसी मैनुअल लेबलिंग की आवश्यकता नहीं है। projeler.json प्रत्येक परियोजना के लिए उपयोग किए गए commit और कंपाइलर फ़्लैग रिकॉर्ड करता है।
स्ट्रिप्ड बाइनरी का अनुकरण: आउटपुट उसी प्रकार दिखता है जैसा Ghidra एक स्ट्रिप्ड बाइनरी में किसी फ़ंक्शन के लिए दिखाता है:
sub_01a3 बन जाते हैं, और वैश्विक डेटा dat_0042 बन जाता है (संख्याएँ फेरबदल की जाती हैं, -O0 और -O2 के लिए अलग-अलग नेमस्पेस के साथ),loc_1 और loc_2 का उपयोग करते हैं,memcpy, __stack_chk_fail) और स्ट्रिंग लिटरल (; -> "out of memory") दिखाई देते रहते हैं क्योंकि वे वास्तविक बाइनरी में भी दिखाई देते हैं।यदि फ़ंक्शन का वास्तविक नाम उसकी अपनी असेंबली में दिखाई देता है—उदाहरण के लिए, किसी त्रुटि संदेश में—तो पंक्ति को sizinti चिह्नित किया जाता है और परीक्षण सेट से बाहर रखा जाता है।
मूल्यांकन (taban.py): मॉडल को केवल असेंबली प्राप्त होती है और उससे एक नाम का अनुमान लगाने के लिए कहा जाता है। अनुमानों को टोकन ओवरलैप (F1) द्वारा स्कोर किया जाता है, इसलिए निकट उत्तर जैसे crc32_update और update_crc को आंशिक क्रेडिट मिलता है।
loc_6:
movzx r9d, byte ptr [rsi + rdx]
add rdi, r9 ← adler32_z (-O2), as the model sees it
add rcx, rdi
inc rdx
cmp rax, rdx
jne loc_6
| प्रोजेक्ट | फ़ंक्शन (-O0 + -O2) | |
|---|---|---|
| प्रशिक्षण | zlib, libpng, sqlite, lua, mbedtls, zstd, libsodium, expat, brotli, jansson, lz4, libyaml, xxhash, cJSON | 16,804 |
| परीक्षण (याद रखने-प्रतिरोधी) | tomlc17, cyaml, mu_json_x, sajs, picomatch | 777 → मूल्यांकन सेट 115 |
डेटासेट Hugging Face पर उपलब्ध है: krxi123/asmsense (16,804 प्रशिक्षण उदाहरण, 777 परीक्षण उदाहरण, eval_115 मूल्यांकन सेट, और लाइसेंस पाठ)। यह Kaggle पर भी मिरर किया गया है: krxiii/asmsense।
अनुमतिपूर्ण लाइसेंस (MIT, BSD, Apache-2.0, ISC, zlib) वाले C प्रोजेक्ट GitHub से olcekle.py के साथ चुने गए और cikar_bin.py (वास्तविक dylib + strip -x) का उपयोग करके -O0/-O1/-O2/-O3/-Os पर संकलित किए गए। प्रोजेक्ट बिल्ड स्क्रिप्ट नहीं चलाई गईं; फ़ाइलें clang के साथ व्यक्तिगत रूप से संकलित की गईं, और जो फ़ाइलें या प्रोजेक्ट संकलित होने में विफल रहे उन्हें छोड़ दिया गया। पंक्तियों को सामान्यीकृत असेंबली हैश द्वारा डुप्लिकेट-मुक्त किया गया। सत्यापन/परीक्षण डेटा के समान असेंबली वाली पंक्तियों को प्रशिक्षण से हटा दिया गया, जबकि वेंडर की गई प्रतियाँ जिनके (फ़ाइल, नाम) जोड़े प्रशिक्षण में दिखाई दिए थे, उन्हें सत्यापन/परीक्षण से हटा दिया गया। प्रत्येक पंक्ति में एक lisans फ़ील्ड है।
| विभाजन | प्रोजेक्ट | पंक्तियाँ | अद्वितीय स्रोत फ़ंक्शन |
|---|---|---|---|
| प्रशिक्षण | 290 | 196,117 | 72,179 |
| सत्यापन | 23 | 19,770 | 6,667 |
| परीक्षण (अल्पज्ञात, ≤200 स्टार, 2024+) | 28 | 12,290 | 4,685 |
473 प्रोजेक्ट में से, 352 ने पंक्तियाँ उत्पन्न कीं और 120 संकलित होने में विफल रहे (कर्नेल, एम्बेडेड, या प्लेटफ़ॉर्म-निर्भर कोड)। केवल clang का उपयोग किया गया। डेटा Git के बाहर रखा गया है और python3 aday_bul.py और python3 olcekle.py hepsi के साथ पुनः उत्पन्न किया जा सकता है।
प्रशिक्षण/परीक्षण विभाजन सख्ती से प्रोजेक्ट-स्तरीय है: किसी प्रोजेक्ट का कोई फ़ंक्शन दोनों पक्षों में नहीं आ सकता। परीक्षण प्रोजेक्ट जानबूझकर अल्पज्ञात (2-190 स्टार) चुने गए, और अधिकांश 2024-2025 में शुरू हुए, जिससे यह बहुत कम संभावना है कि बड़े मॉडलों ने प्रशिक्षण के दौरान उन्हें zlib जैसी लाइब्रेरी की तुलना में देखा हो। लाइसेंस: veri/LISANSLAR.md।
ज्ञात अपवाद: वेंडर किया गया कोड। जारी किए गए v6 डेटा का एक स्वतंत्र ऑडिट (rapor/arastirma/V6_VERI_DENETIMI.md, veri_denetim_v6.py) ने पुष्टि की कि कोई प्रोजेक्ट, id या (प्रोजेक्ट, फ़ाइल, नाम) दोनों पक्षों में नहीं आता, लेकिन परीक्षण प्रोजेक्ट snkv अपने स्वयं के फ़ाइल नामों के तहत SQLite को एम्बेड करता है जबकि sqlite एक प्रशिक्षण प्रोजेक्ट है। निश्चित 2,000-पंक्ति परीक्षण नमूने में, 217 पंक्तियों (10.85%) का नाम SQLite प्रशिक्षण फ़ंक्शन के समान है। हर मॉडल उन पंक्तियों पर कम स्कोर करता है, इसलिए वे परिणामों को बढ़ाते नहीं हैं; वे छोटे-बनाम-बड़े अंतर को संकीर्ण करते हैं (परिणाम, खंड 6 देखें)। सत्यापन नमूने valid_300 में 16 समान पंक्तियाँ हैं (5.3%)।
औसत नाम F1 (1.0 = सटीक मिलान)। "प्रीफ़िक्स-स्ट्रिप्ड F1" कॉलम में, प्रत्येक प्रोजेक्ट का सामान्य नाम प्रीफ़िक्स (cyaml_, mu_, sajs_) दोनों पक्षों से हटा दिया जाता है; मॉडल असेंबली से इस प्रीफ़िक्स का अनुमान नहीं लगा सकता।