اعداد جادویی: آشنایی با کدهای رازآلود برنامهنویسان در رایانه شما
حتی از زمان اختراع ماشین حسابهای اولیه، اعداد رمزآلود در داخل این دستگاهها مخفی شده بودند تا ازآنها برای برقراری ارتباط با برنامهها و فایلهای مختلف استفاده شود. امروز قصد داریم در این مطلب نگاهی به این کدهای مخفی داشته باشیم.
این کدهای مخفی چه معنایی دارند؟
اکثر زبانهای برنامهنویسی از اعداد صحیح 32 بیتی برای مشخص کردن نوع خاصی از اطلاعات در پس پرده بهره میبرند. این اعداد یا در رم ذخیره میشوند و یا توسط پردازنده به صورت یکها و صفرهای 32 بیتی مورد استفاده قرار میگیرند.
در کد مرجع، این اعداد به صورت دهدهی یا نهایتا هگزادسیمال نوشته میشوند که از اعداد 0 تا 9 و حروف A تا F در آنها بهره برده میشود.
وقتی یک سیستمعامل یا برنامه میخواهد نوع فایل را مشخص کند، میتواند در ابتدای فایل، نظارهگر علامتی برای تشخیص نوع فایل باشد. برای مثال یک فایل پیدیاف با مقدار 0x255044462D312E33 آغاز میشود که معادل “%PDF-1.3″ در فرمت اسکی میباشد.
یک فایل زیپ نیز با 0x504B آغاز میشود که معادل “PK” یعنی عبارت نشئت گرفته شده از ابزار PKZip میباشد. با نگاه کردن به این علامت، میتوان نوع فایل را حتی بدون داشت اطلاعات متادیتای دیگر مشخص کرد.
از ابزار لینوکسی به نام “file” نیز میتوانید از طریق ترمینال برای مشخص کردن نوع فایل استفاده کنید. در حقیقت این ابزار اعداد جادویی داخل فایل به نام “magic” را میخواند و تبدیل میکند.
وقتی یک برنامه میخواهد یک تابع را فراخوانی کند، میتواند این مقادیر را با استفاده از انواع استاندارد مانند اعداد صحیح به آن تابع برساند. بدین ترتیب به جای تایپ عبارت 60، برنامهنویس یک تابع را در کد منبع فراخوانی میکند.
همه این مثالها میتوانند در زیرشاخه اعداد جادویی قرار بگیرند زیرا برنامهنویسان، اعداد خاص هگزادسیمالی به منظور مشخص کردن یک تابع یا نوع فایل نیاز دارند و اگر این مقدار درست نباشد، نتیجه دلخواه خود را دریافت نخواهند کرد. به همین منظور وقتی برنامهنویسان دوست دارند به نحو منظمتری برنامه خود را بنویسند، این امکان وجود دارد تا با استفاده از اعداد هگزادسیمالی که یک معنای مشخص در زبان انگلیسی دارد برنامه خود را بنویسند.
مثالهایی از این اعداد جادویی
اگر نگاهی سریع به کد منبع لینوکس بیندازید خواهد دید که راهاندازی مجدد سیستم در این سیستمعامل یا فراخوانی _reboot() system، به یک متغیر جادویی نیاز دارد تا معادل عدد هگزادسیمال 0xfee1dead قرارگیرد.
اگر چیزی قصد داشته باشد این تابع را بدون گذر از این عدد جادویی فراخوانی کند، یک پیغام خطا را بازخواهد گردانید.
0xbaaaaaad در مشخصههای نشاندهنده خطای سیستمعامل IOS، بیانگر یک پیغام کامل از مجموعه سیستم است.
0xdeadfa11 پیغام خطایی است که توسط IOS نشاندهنده آنستکه یک برنامه توسط کاربر مجبور به بسته شدن شده است.
مثالهای بیشتر در این زمینه را میتوانید با استفاده از بازکردن فایلها با استفاده از یک ویرایشگر هگز مشاهده کنید. به عنوان یک مثال، مشاهده خواهید کرد که ریکاوری ایمج گوشیهای اندرویدی مانند ClockworkMod اگر آنها را در فرمت اسکی بخوانیم با عبارت ANDROID! آغاز میشوند.