libgoblin


दस्तावेज़ीकरण
https://docs.rs/goblin/
परिवर्तन लॉग
उपयोग
Goblin को rustc 1.85.0 (Rust 2024 संस्करण) की आवश्यकता है।
अपने Cargo.toml में जोड़ें:
[dependencies]
goblin = "0.10"
विशेषताएँ
- बढ़िया क्रेट नाम
- शून्य-प्रतिलिपि, क्रॉस-प्लेटफ़ॉर्म, एंडियन-जागरूक, ELF64/32 कार्यान्वयन - वाह!
- शून्य-प्रतिलिपि, क्रॉस-प्लेटफ़ॉर्म, एंडियन-जागरूक, 32/64 बिट Mach-o पार्सर - ज़ोइक्स!
- PE 32/64-बिट पार्सर - बिंग!
- एक यूनिक्स और BSD शैली का संग्रह पार्सर (बाद वाला [@willglynn] के सौजन्य से) - हुज़्ज़ा!
- कई cfg विकल्प - यह आपके सिर को घुमा देगा, और स्रोत पढ़ते समय आपको गुस्सा दिलाएगा!
- फज़ किया गया - "मुझे यह रिपोर्ट करते हुए खुशी हो रही है कि goblin ने 100 मिलियन फ़ज़िंग रन सहे लिए, 1 मिलियन रन प्रत्येक बीज 1 से 100 के लिए।" - [@sanxiyn]
- परीक्षण
libgoblin का उद्देश्य बाइनरी पार्सिंग, लोडिंग और विश्लेषण के लिए आपका एक-स्टॉप शॉप बनना है।
उपयोग-मामले
Goblin मुख्य रूप से निम्नलिखित महत्वपूर्ण उपयोग-मामलों का समर्थन करता है:
-
कोर, std-मुक्त #[repr(C)] स्ट्रक्ट, छोटा संकलन समय, आपकी सुविधानुसार 32/64 (या दोनों)।
-
टाइप पनिंग। एक बार किसी प्रकार पर एक फ़ंक्शन परिभाषित करें, लेकिन इसे 32 या 64-बिट वेरिएंट पर काम करने दें - वास्तव में कुछ भी बदले बिना, और कोई मैक्रो नहीं! एक बुनियादी उदाहरण के लिए examples/automagic.rs देखें।
-
std मोड। यह Pread और Pwrite के माध्यम से रीड और राइट कार्यान्वयन, फ़ाइल से पढ़ना, सुविधा आवंटन, अतिरिक्त विधियाँ आदि जोड़ता है। यह उन ग्राहकों के लिए है जो आवंटन कर सकते हैं और डिस्क से बाइनरी पढ़ना चाहते हैं।
-
Endian_fd। एक वास्तव में भयानक नाम 😆 यह panopticon या falcon जैसे बाइनरी विश्लेषण के लिए है, जिसे विदेशी एंडियननेस की बाइनरी पढ़ने की आवश्यकता होती है, या क्रॉस-प्लेटफ़ॉर्म विदेशी आर्किटेक्चर बिनुटिल्स बनाने के आधार के रूप में, उदा. cargo-sym और bingrep इसके सरल उदाहरण हैं, लेकिन सीमा आकाश है।
यहाँ कुछ चीजें हैं जो आप इस क्रेट के साथ कर सकते हैं (या कार्यान्वित करने में मदद कर सकते हैं ताकि वे किए जा सकें):
- एक कंपाइलर लिखें और इसका उपयोग बाइनरी उत्पन्न करने के लिए करें (सभी कच्चे C स्ट्रक्ट में
Pwrite व्युत्पन्न है)।
- एक बाइनरी विश्लेषण उपकरण लिखें जो विभिन्न बाइनरी प्रारूपों को लोड, पार्स और विश्लेषित करता है, उदा., panopticon या falcon।
- एक अर्ध-कार्यशील गतिशील लिंकर लिखें।
- एक कर्नेल लिखें और
no_std cfg का उपयोग करके बाइनरी लोड करें। यानी, यह मूल रूप से सिर्फ स्ट्रक्ट और कॉन्स्ट डेफिनिशन है (C हेडर की तरह) - कोई fd, कोई आउटपुट, कोई std नहीं।
- एक bin2json उपकरण लिखें, क्योंकि बाइनरी प्रारूप JSON में क्यों नहीं होने चाहिए?
Cfgs
libgoblin को बड़े पैमाने पर कॉन्फ़िगरेबल बनाने के लिए डिज़ाइन किया गया है। वर्तमान फ़्लैग हैं:
- elf64 - 64-बिट elf बाइनरी,
repr(C) स्ट्रक्ट डेफ
- elf32 - 32-बिट elf बाइनरी,
repr(C) स्ट्रक्ट डेफ
- mach64 - 64-बिट mach-o
repr(C) स्ट्रक्ट डेफ
- mach32 - 32-बिट mach-o
repr(C) स्ट्रक्ट डेफ
- pe32 - 32-बिट PE
repr(C) स्ट्रक्ट डेफ
- pe64 - 64-बिट PE
repr(C) स्ट्रक्ट डेफ
- te - Terse Executable (TE)
repr(C) स्ट्रक्ट डेफ
- archive - एक यूनिक्स संग्रह पार्सर
- endian_fd - बाइनरी में एंडियननेस के अनुसार पार्स करें
- std -
no_std वातावरण की अनुमति देने के लिए
अनुरक्षक
- PE: [@kkent030315]
- Elf: [@m4b], आवेदनों के लिए खुला
- Mach-o: [@m4b], आवेदनों के लिए खुला
अनुरक्षक उस विशेष बैकएंड के लिए पहले संपर्क समीक्षक होते हैं। इन्हें पिछले योगदान, गतिविधि, मूल ज्ञान और मैत्रीपूर्ण और मिलनसार व्यवहार के आधार पर चुना जाता है :D
वर्तमान में, मेरे ([@m4b]) पास सभी PR के लिए मर्ज अधिकार हैं। भविष्य में यह संभावना है कि उस दिए गए बैकएंड के अनुरक्षक के पास भी मर्ज अधिकार होंगे।
अंत में, मैं अभी भी सभी PR की सतही समीक्षा करूंगा, लेकिन अधिकतर/पूरी तरह से उस बैकएंड के अनुरक्षक पर निर्भर रहूंगा।
और हमेशा बिल और टेड की बुद्धि को याद रखें: "एक दूसरे के प्रति उत्कृष्ट बनें!"
योगदानकर्ता
आप सभी का धन्यवाद ❤️ !
वर्णमाला क्रम में:
- [@000lbh]
- [@2vg]
- [@5225225]
- [@alessandrod]
- [@amanieu]
- [@anfedotoff]
- [@apalm]
- [@baloo]
- [@BinFlip]
- [@burjui]
- [@CalebFenton]
- [@chf0x]
- [@connorkuehl]
- [@dancrossnyc]
- [@DreydenGys]
- [@dureuill]
- [@Evian-Zhang]
- [@ExPixel]
- [@flanfly]
- [@glandium]
- [@glslang]
- [@Gelbpunkt]
- [@gunbux]
- [@h33p]
- [@hannahfluch]
- [@Hexorg]
- [@ibabushkin]
- [@ideeockus]
- [@ivlzme]
- [@jackcmay]
- [@jan-auer]
- [@Javagedes]
- [@jessehui]
- [@jdub]
- [@Jhynjhiruu]
- [@JohnScience]
- [@johannst]
- [@joschock]
- [@jrmuizel]
- [@jsgf]
- [@Jvlegod]
- [@keith]
- [@kjempelodott]
- [@kkent030315]
- [@ko1n]
- [@le-jzr]
- [@Lichtso]
- [@lion128]
- [@lissyx]
- [@llogiq]
- [@lumag]
- [@lzutao]
- [@lzybkr]
- [@m-hilgendorf]
- [@makubacki]
- [@mmaekr]
- [@m4b]
- [@messense]
- [@mitsuhiko]
- [@mkroening]
- [@mre]
- [@Mrmaxmeier]
- [n01e0]
- [nathaniel-daniel]
- [@nick96]
- [@nico-abram]
- [@npmccallum]
- [@pchickey]
- [@philipc]
- [@PJB3005]
- [@prettyroseslover]
- [@Pzixel]
- [@quake]
- [@raindev]
- [@RaitoBezarius]
- [@ReturnRei]
- [@rocallahan]
- [@sanxiyn]
- [@SAY-5]
- [@skdltmxn]
- [@sollyucko]
- [@supervacuus]
- [@Swatinem]
- [@SweetVishnya]
- [@SquareMan]
- [@tathanhdinh]
- [@Techno-coder]
- [@tiann]
- [@ticki]
- [@Timmmm]
- [@Tiwalun]
- [@track-5]
- [@tux3]
- [@wickerwacka]
- [@willglynn]
- [@woodruffw]
- [@wyxloading]
- [@xcoldhandsx]
- [@x0rb3l]
- [@x64k]