मैजिक नंबर गुप्त कोड जो प्रोग्रामर आपके पीसी में छिपाते हैं
जब से पहले व्यक्ति ने एक कैलकुलेटर पर 5318008 लिखा है, nerds आपके पीसी के अंदर गुप्त संख्या छिपा रहा है, और अनुप्रयोगों और फ़ाइलों के बीच गुप्त हैंडशेक पर बातचीत करने के लिए उनका उपयोग कर रहा है। आज हम कुछ और मनोरंजक उदाहरणों पर एक नज़र डालते हैं.
मैजिक नंबर क्या हैं?
अधिकांश प्रोग्रामिंग लैंग्वेज 32-बिट पूर्णांक प्रकार का उपयोग पर्दे के पीछे के कुछ प्रकार के डेटा का प्रतिनिधित्व करने के लिए करती हैं - आंतरिक रूप से संख्या रैम में संग्रहीत होती है या सीपीयू द्वारा 32 वाले और शून्य के रूप में उपयोग की जाती है, लेकिन स्रोत कोड में इसे या तो बाहर लिखा जाएगा। नियमित दशमलव प्रारूप, या हेक्साडेसिमल प्रारूप के रूप में, जो 0 के माध्यम से संख्या 0 और F के माध्यम से अक्षर A का उपयोग करता है.
जब ऑपरेटिंग सिस्टम या कोई एप्लिकेशन किसी फ़ाइल के प्रकार को निर्धारित करना चाहता है, तो यह एक विशेष मार्कर के लिए फ़ाइल की शुरुआत को देख सकता है जो फ़ाइल के प्रकार को दर्शाता है। उदाहरण के लिए, एक पीडीएफ फाइल हेक्स मान 0x255044462D312E33 के साथ शुरू हो सकती है, जो ASCII प्रारूप में "% PDF-1.3" के बराबर है, या एक ज़िप फ़ाइल 0x504B के साथ शुरू होती है, जो कि "PK" के बराबर होती है, जो मूल PKZip उपयोगिता से उतरती है। इस "हस्ताक्षर" को देखकर, किसी भी अन्य मेटाडेटा के बिना भी एक फ़ाइल प्रकार को आसानी से पहचाना जा सकता है.
संकलित जावा क्लास की फाइलें CAFEBABE से शुरू होती हैंलिनक्स उपयोगिता "फ़ाइल" का उपयोग फ़ाइल के प्रकार को निर्धारित करने के लिए टर्मिनल से किया जा सकता है - वास्तव में, यह "जादू" नामक एक फ़ाइल से जादू की संख्या को पढ़ता है।
जब कोई एप्लिकेशन किसी फ़ंक्शन को कॉल करना चाहता है, तो यह पूर्णांक जैसे मानक प्रकारों का उपयोग करके उस फ़ंक्शन को मान दे सकता है, जिसे हेक्साडेसिमल प्रारूप में स्रोत कोड में व्यक्त किया जा सकता है। यह स्थिरांक के लिए विशेष रूप से सच है, जो पहचानकर्ता हैं जो मानव-पठनीय नामों जैसे कि AUTOSAVE_INTERVAL से परिभाषित हैं, लेकिन वे वास्तविक पूर्णांक (या अन्य प्रकार) मानों के लिए मैप करते हैं। इसलिए प्रोग्रामर को स्रोत कोड में फ़ंक्शन को कॉल करने पर हर बार 60 की तरह एक मान टाइप करने के बजाय, वे बेहतर पठनीयता के लिए AUTOSAVE_INTERVAL निरंतर का उपयोग कर सकते हैं। (स्थिरांक को आसानी से पहचाना जाता है क्योंकि वे सभी बड़े अक्षरों में लिखे होते हैं).
ये सभी उदाहरण मैजिक नंबरों के अंतर्गत आ सकते हैं, क्योंकि किसी फ़ंक्शन या फ़ाइल प्रकार को ठीक से काम करने के लिए उन्हें एक विशिष्ट हेक्साडेसिमल संख्या की आवश्यकता हो सकती है ... यदि मान सही नहीं है तो यह काम नहीं करेगा। और जब कोई प्रोग्रामर थोड़ी मस्ती करना चाहता है, तो वे हेक्साडेसिमल नंबरों का उपयोग करके इन मूल्यों को परिभाषित कर सकते हैं जो अंग्रेजी में कुछ बोलते हैं, अन्यथा हेक्सस्पेक के रूप में जाना जाता है।.
मैजिक नंबर के साथ मज़ा: कुछ उल्लेखनीय उदाहरण
प्रत्येक AppleScript FADEDEAD के साथ समाप्त होता हैयदि आप लिनक्स स्रोत कोड में एक त्वरित रूप से देखते हैं, तो आप देखेंगे कि लिनक्स पर _reboot () सिस्टम कॉल के लिए हेक्साडेसिमल नंबर 0xfee1dead के बराबर होने वाले "मैजिक" चर की आवश्यकता होती है। अगर किसी चीज़ ने पहले उस मैजिक वैल्यू को पास किए बिना उस फंक्शन को कॉल करने की कोशिश की, तो यह सिर्फ एक त्रुटि होगी.
GPT विभाजन योजना में BIOS बूट विभाजन के लिए GUID (विश्व स्तर पर अद्वितीय पहचानकर्ता) 21686148-6449-6E6F-744E-656564454649 है, जो ASCII स्ट्रिंग "Hah-IdontNeedEFI" बनाता है, इस तथ्य के लिए एक भ्रम है कि GPT का सामान्य रूप से उपयोग किया जाएगा! कंप्यूटर में जो UEFI के साथ BIOS को प्रतिस्थापित करता है, लेकिन यह जरूरी नहीं है.
Microsoft ने अपने हाइपर- V वर्चुअल-मशीन सपोर्टिंग सोर्स कोड में 0x0B00B135 प्रसिद्ध रूप से लिनक्स पर जमा किया, फिर उन्होंने वैल्यू को 0xB16B00B5 में बदल दिया, और अंत में उन्होंने इसे सोर्स कोड से हटाए जाने से पहले इसे दशमलव में बदल दिया।.
अधिक मजेदार उदाहरणों में शामिल हैं:
- 0xbaaaaaad - iOS क्रैश लॉगिंग द्वारा उपयोग किया जाता है यह इंगित करने के लिए कि लॉग पूरे सिस्टम का एक स्टैक्शॉट है.
- 0xbad22222 - iOS क्रैश लॉगिंग द्वारा उपयोग किया जाता है यह इंगित करने के लिए कि एक वीओआईपी ऐप को iOS द्वारा मार दिया गया है क्योंकि यह दुर्व्यवहार करता है.
- 0x8badf00d - (Ate Bad Food) का उपयोग iOS क्रैश लॉग द्वारा किया जाता है ताकि यह इंगित किया जा सके कि किसी एप्लिकेशन को कुछ करने में बहुत लंबा समय लगा और वॉचडॉग टाइमआउट द्वारा मारा गया.
- 0xdeadfa11 - एक ऐप द्वारा उपयोगकर्ता द्वारा छोड़े जाने पर iOS क्रैश लॉगिंग द्वारा (डेड फॉल) का उपयोग किया जाता है.
- 0xDEADD00D - एक VM गर्भपात को इंगित करने के लिए एंड्रॉइड द्वारा उपयोग किया जाता है.
- 0xDEAD10CC (डेड लॉक) का उपयोग iOS क्रैश लॉगिंग द्वारा किया जाता है जब कोई एप्लिकेशन बैकग्राउंड में किसी संसाधन को लॉक करता है.
- डिबगिंग के लिए Windows में LocalAlloc फ़ंक्शन द्वारा उपयोग किया गया 0xBAADF00D (खराब भोजन).
- जावा के pack200 कम्प्रेशन द्वारा प्रयुक्त 0xCAFED00D (कैफ़े दोस्त).
- संकलित वर्ग फ़ाइलों के लिए पहचानकर्ता के रूप में जावा द्वारा प्रयुक्त 0xCAFEBABE (कैफे बेब)
- 0x0D15EA5E (रोग) एक सामान्य बूट को इंगित करने के लिए गेमकोब और Wii पर निन्टेंडो द्वारा उपयोग किया जाता है.
- 0x1BADB002 (1 खराब बूट) मल्टीबूट विनिर्देश द्वारा एक जादू नंबर के रूप में उपयोग किया जाता है
- 0xDEADDEAD - Windows द्वारा मैन्युअल रूप से आरंभ किए गए डिबग क्रैश को इंगित करने के लिए उपयोग किया जाता है, अन्यथा ब्लू स्क्रीन ऑफ़ डेथ के रूप में जाना जाता है.
ये केवल वही नहीं हैं, बेशक, लेकिन उदाहरणों की एक छोटी सूची जो मज़ेदार लग रही थी। किसी और का पता है? हमें टिप्पणियों में बताएं.
खुद के लिए उदाहरण देखना
आप एक हेक्स संपादक खोलकर और फिर किसी भी प्रकार की फ़ाइल प्रकार खोलकर अधिक उदाहरण देख सकते हैं। विंडोज, ओएस एक्स या लिनक्स के लिए बहुत सारे फ्रीवेयर हेक्स संपादक उपलब्ध हैं - बस यह सुनिश्चित करें कि आप फ्रीवेयर इंस्टॉल करते समय सावधान रहें कि क्रैपवेयर या स्पाईवेयर से संक्रमित न हों.
एक अतिरिक्त उदाहरण के रूप में, क्लॉकवर्कमॉड जैसे एंड्रॉइड फोन के लिए रिकवरी इमेज "ANDROID!" से शुरू होती है, अगर ASCII में पढ़ा जाए।.
ध्यान दें: जब आप चारों ओर देख रहे हों तो कुछ भी बदलते मत जाओ। हेक्स संपादक चीजों को तोड़ सकते हैं!