If-Koubou

Magic Numbers: The Secret Codes yang diprogram oleh Programmers di PC Anda

Magic Numbers: The Secret Codes yang diprogram oleh Programmers di PC Anda (Bagaimana caranya)

Sejak orang pertama menulis 5318008 di kalkulator, kutu buku telah menyembunyikan nomor rahasia di dalam PC Anda, dan menggunakannya untuk menegosiasikan handshake rahasia antara aplikasi dan file. Hari ini kita melihat sekilas beberapa contoh yang lebih menghibur.

Apa itu Bilangan Ajaib?

Kebanyakan bahasa pemrograman menggunakan tipe integer 32-bit untuk mewakili jenis data tertentu di belakang layar - secara internal nomor tersebut disimpan dalam RAM atau digunakan oleh CPU sebagai 32 dan nol, tetapi dalam kode sumber itu akan ditulis dalam format desimal reguler, atau sebagai format heksadesimal, yang menggunakan angka 0 hingga 9 dan huruf A hingga F.

Ketika sistem operasi atau aplikasi ingin menentukan jenis file, dapat melihat ke awal file untuk penanda khusus yang menandakan jenis file. Sebagai contoh, file PDF mungkin mulai dengan nilai hex 0x255044462D312E33, yang sama dengan "% PDF-1.3" dalam format ASCII, atau file ZIP dimulai dengan 0x504B, yang sama dengan "PK", yang turun dari utilitas PKZip asli. Dengan melihat "tanda tangan" ini, jenis file dapat dengan mudah diidentifikasi bahkan tanpa metadata lainnya.

File Java Class terkompilasi dimulai dengan CAFEBABE

"File" utilitas Linux dapat digunakan dari terminal untuk menentukan jenis file - sebenarnya, itu membaca angka ajaib dari file yang disebut "sihir."

Ketika sebuah aplikasi ingin memanggil suatu fungsi, ia dapat melewatkan nilai-nilai ke fungsi tersebut menggunakan tipe standar seperti integer, yang dapat diekspresikan dalam kode sumber dalam format heksadesimal. Hal ini terutama berlaku untuk konstanta, yang merupakan pengenal yang didefinisikan dengan nama yang dapat dibaca manusia seperti AUTOSAVE_INTERVAL, tetapi mereka memetakan ke nilai integer (atau tipe) lainnya. Jadi alih-alih programmer mengetikkan nilai seperti 60 setiap kali mereka memanggil fungsi dalam kode sumber, mereka dapat menggunakan konstanta AUTOSAVE_INTERVAL untuk keterbacaan yang lebih baik. (Konstanta biasanya mudah dikenali karena ditulis dalam huruf besar semua).

Semua contoh ini dapat termasuk dalam istilah Angka Ajaib, karena mereka mungkin memerlukan nomor heksadesimal tertentu agar suatu fungsi atau jenis file berfungsi dengan baik ... jika nilainya tidak benar maka tidak akan berfungsi. Dan ketika seorang programmer ingin bersenang-senang sedikit, mereka mungkin mendefinisikan nilai-nilai ini menggunakan angka heksadesimal yang mengeja sesuatu dalam bahasa Inggris, atau dikenal sebagai hexspeak.

Menyenangkan Dengan Nomor Ajaib: Beberapa Contoh Penting

Setiap AppleScript berakhir dengan FADEDEAD

Jika Anda melihat sekilas kode sumber Linux, Anda akan melihat bahwa pemanggilan sistem _reboot () di Linux membutuhkan variabel "ajaib" yang akan dilewatkan yang sama dengan angka heksadesimal 0xfee1dead. Jika ada yang mencoba memanggil fungsi itu tanpa melewatkan nilai sihir itu terlebih dahulu, itu hanya akan mengembalikan kesalahan.

GUID (pengidentifikasi unik global) untuk partisi boot BIOS dalam skema partisi GPT adalah 21686148-6449-6E6F-744E-656564454649, yang membentuk string ASCII "Hah! IdontNeedEFI", sebuah referensi terhadap fakta bahwa GPT biasanya akan digunakan di komputer yang menggantikan BIOS dengan UEFI, tetapi tidak harus demikian.

Microsoft secara terkenal menyembunyikan 0x0B00B135 dalam kode sumber pendukung mesin virtual Hyper-V yang dikirim ke Linux, kemudian mereka mengubah nilainya menjadi 0xB16B00B5, dan akhirnya mereka mengubahnya ke desimal sebelum dihapus dari kode sumber sama sekali.

Contoh lebih menyenangkan termasuk:

  • 0xbaaaaaad - digunakan oleh penebangan macet iOS untuk menunjukkan bahwa log adalah tumpukan dari keseluruhan sistem.
  • 0xbad22222 - digunakan oleh penebangan macet iOS untuk menunjukkan bahwa aplikasi VoIP telah dibunuh oleh iOS karena keliru.
  • 0x8badf00d - (Ate Bad Food) digunakan oleh log kecelakaan iOS untuk menunjukkan bahwa aplikasi terlalu lama untuk melakukan sesuatu dan terbunuh oleh batas waktu pengawas.
  • 0xdeadfa11 - (Dead Fall) digunakan oleh penebangan macet iOS saat aplikasi dipaksa berhenti oleh pengguna.
  • 0xDEADD00D - digunakan oleh Android untuk menunjukkan kegagalan VM.
  • 0xDEAD10CC (Dead Lock) yang digunakan oleh crash logging iOS ketika aplikasi mengunci sumber di latar belakang.
  • 0xBAADF00D (Makanan Buruk) yang digunakan oleh fungsi LocalAlloc di Windows untuk debugging.
  • 0xCAFED00D (Cafe dude) yang digunakan oleh kompresi pack200 Java.
  • 0xCAFEBABE (Cafe babe) yang digunakan oleh Java sebagai pengenal untuk file kelas yang dikompilasi
  • 0x0D15EA5E (Penyakit) yang digunakan oleh Nintendo pada Gamecube dan Wii untuk menunjukkan boot normal terjadi.
  • 0x1BADB002 (1 boot buruk) yang digunakan oleh spesifikasi multiboot sebagai angka ajaib
  • 0xDEADDEAD - digunakan oleh Windows untuk menunjukkan crash debug yang diinisiasi secara manual, atau dikenal sebagai Blue Screen of Death.

Ini bukan satu-satunya yang ada di luar sana, tentu saja, tetapi hanya daftar pendek contoh yang tampaknya menyenangkan. Tahu lagi? Beritahu kami di komentar.

Melihat Contoh untuk Diri Anda

Anda dapat melihat lebih banyak contoh dengan membuka hex editor dan kemudian membuka sejumlah jenis file. Ada banyak editor hex freeware yang tersedia untuk Windows, OS X, atau Linux - pastikan Anda berhati-hati saat menginstal freeware agar tidak terinfeksi crapware atau spyware.

Sebagai contoh tambahan, gambar pemulihan untuk ponsel Android seperti ClockworkMod dimulai dengan "ANDROID!" Jika dibaca dalam format ASCII.

catatan: jangan berubah apa-apa saat kamu melihat sekeliling. Hex editor dapat memecahkan banyak hal!