Apa itu ELF Magic?

26

Saya telah melihat diskusi sebelumnya tentang sihir ELF, yang terbaru komentar dalam pertanyaan pertukaran tumpukan Keamanan ini . Saya pernah melihatnya disebutkan sebelumnya, dan saya pernah melihatnya di log boot saya sendiri .. Tapi saya tidak yakin apa itu.

Halaman manual di peri sedikit di atas kepala saya, karena saya tidak melakukan C atau bahasa tingkat yang lebih rendah.

Sebagai seseorang yang menggunakan Linux sebagai sistem operasi setiap hari, apa itu ELF?

Mitch
sumber
3
Mengenai sihir, lihat juga Linux mengklasifikasikan file perintah file
Gilles 'SO- stop being evil'
13
Judul lebih cocok untuk rpg stackexchange.
Cthulhu

Jawaban:

37

Langsung dari halaman manual yang Anda referensi:

elf - format of Executable and Linking Format (ELF) files

ELF mendefinisikan format biner dari file yang dapat dieksekusi yang digunakan oleh Linux. Saat Anda menjalankan executable, OS harus tahu cara memuat executable ke dalam memori dengan benar, cara mengatasi dependensi library dinamis dan kemudian ke mana harus melompat ke executable yang dimuat untuk mulai mengeksekusinya. Format ELF menyediakan informasi ini. ELF magic digunakan untuk mengidentifikasi file ELF dan hanya beberapa byte pertama dari file:

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

atau

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

16 byte ini dengan jelas mengidentifikasi file sebagai executable ELF. Banyak format file memiliki byte "ajaib" yang menyelesaikan tugas yang sama - mengidentifikasi jenis file.

casey
sumber
8
Keajaiban yang sebenarnya hanya empat byte pertama. Bidang-bidang berikut menjelaskan endianness, arsitektur CPU, dan berbagai hal lainnya.
Simon Richter
@SimonRichter yang bermuara pada semantik. 4 byte pertama adalah sihir untuk identifikasi generik dari banyak jenis file, tetapi penanya memang menentukan "sihir ELF", yang bahkan readelfmengakui adalah 16 byte.
casey
2
Jika Anda ingin benar-benar teknis, 16 byte pertama adalah "identifikasi" ( e_ident), di mana 4 byte pertama adalah angka ajaib ( EI_MAG0melalui EI_MAG3)
Michael Mrozek
1
@slebetman Penggunaan saya atas "sihir" berasal dari spesifikasi ELF: "4 byte pertama file berisi 'angka ajaib,' mengidentifikasi file sebagai file objek ELF"
Michael Mrozek
2
"Jelas" sedikit melebih-lebihkan. Kecuali Anda tahu dari mana file itu berasal, semuanya hanyalah tebakan. File dalam /bin, tentu saja, hampir pasti biner ELF. Beberapa file acak yang Anda unduh, meskipun ... tidak ada yang tahu.
cHao
11

"Angka ajaib" adalah nama yang diberikan pada urutan byte yang konstan (biasanya) pada awal file, yang digunakan untuk menandai file-file tersebut sebagai format file tertentu. Mereka melayani tujuan yang mirip dengan ekstensi file.

Lihat entri file jargon untuk informasi lebih lanjut.

Misalnya, gambar PNG selalu dimulai dengan delapan byte yang sama: 137 80 78 71 13 10 26 10

Karenanya angka ajaib ELF adalah byte pada awal file elf yang mengidentifikasinya.

legolass
sumber