ELF Magic คืออะไร


26

ฉันเคยเห็นการสนทนาก่อนหน้านี้เกี่ยวกับเวทมนตร์เอลฟ์ล่าสุดความคิดเห็นในคำถามแลกเปลี่ยนความปลอดภัยสแต็คนี้ ฉันเคยเห็นมาแล้วและฉันเห็นมันในบันทึกการบูตของตัวเอง .. แต่ฉันไม่แน่ใจว่ามันคืออะไร

man pageบน elf นั้นค่อนข้างเหนือหัวฉันเพราะฉันไม่ได้ใช้ภาษา C หรือภาษาระดับต่ำกว่า

ในฐานะที่เป็นคนที่ใช้ Linux เป็นระบบปฏิบัติการทุกวันเอลฟ์คืออะไร



13
ชื่อเหมาะกว่าสำหรับ rpg stackexchange
คธูลู

คำตอบ:


37

ได้จากหน้าคนที่คุณอ้างถึง:

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

ELF กำหนดรูปแบบไบนารี่ของไฟล์ปฏิบัติการที่ใช้โดย Linux เมื่อคุณเรียกใช้ไฟล์ปฏิบัติการระบบปฏิบัติการจะต้องรู้วิธีโหลดไฟล์ปฏิบัติการลงในหน่วยความจำอย่างถูกต้องวิธีแก้ปัญหาการพึ่งพาไลบรารีแบบไดนามิกและตำแหน่งที่จะข้ามไปยังไฟล์ปฏิบัติการที่โหลดได้เพื่อเริ่มดำเนินการ รูปแบบ ELF จัดเตรียมข้อมูลนี้ เวทมนตร์เอลฟ์ใช้เพื่อระบุไฟล์เอลฟ์และเป็นเพียงไม่กี่ไบต์แรกของไฟล์:

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

หรือ

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

ไบต์ 16 เหล่านี้ระบุไฟล์เป็นปฏิบัติการที่เอลฟ์ไม่น่าสงสัย รูปแบบไฟล์หลายรูปแบบมีไบต์ "เวทมนต์" ที่ทำงานเดียวกัน - ระบุประเภทของไฟล์


8
เวทมนตร์ที่เกิดขึ้นจริงเป็นเพียงสี่ไบต์แรก ฟิลด์ต่อไปนี้อธิบายถึง endianness สถาปัตยกรรม CPU และสิ่งอื่น ๆ
Simon Richter

@ SimonRichter ที่ทำให้เดือดดาล 4 ไบต์แรกเป็นเวทย์มนตร์สำหรับการระบุตัวตนทั่วไปของไฟล์หลายประเภท แต่ผู้ถามได้ระบุว่า "เอลฟ์เวทย์มนตร์" ซึ่งแม้จะreadelfยอมรับว่าเป็น 16 ไบต์
casey

2
หากคุณต้องการได้รับเทคนิคจริง ๆ 16 ไบต์แรกคือ "รหัส" ( e_ident) ซึ่ง 4 ไบต์แรกเป็นหมายเลขมายากล ( EI_MAG0ผ่านEI_MAG3)
Michael Mrozek

1
@slebetman การใช้งาน "magic" ของฉันมาจากข้อมูลจำเพาะของ ELF: "4 ไบต์แรกของไฟล์ถือ 'หมายเลขมายากล' ระบุไฟล์เป็นไฟล์วัตถุ ELF"
Michael Mrozek

2
"Unigiguously" กำลังคุยโวเล็กน้อย หากคุณไม่ทราบว่าไฟล์มาจากไหนอะไรก็เป็นเพียงการเดา ไฟล์ใน/binแน่นอนมันเกือบจะเป็นไบนารีเอลฟ์ ไฟล์สุ่มบางไฟล์ที่คุณดาวน์โหลดแม้ว่าจะไม่มีการบอก
cHao

11

"Magic numbers" เป็นชื่อที่กำหนดให้กับลำดับคงที่ของไบต์ (ปกติ) ที่จุดเริ่มต้นของไฟล์ที่ใช้เพื่อทำเครื่องหมายไฟล์เหล่านั้นว่าเป็นรูปแบบไฟล์เฉพาะ พวกเขาให้บริการวัตถุประสงค์ที่คล้ายคลึงกับนามสกุลไฟล์

ดูรายการไฟล์ศัพท์แสงสำหรับข้อมูลเพิ่มเติม

ตัวอย่างเช่นรูปภาพ PNG จะเริ่มต้นด้วยแปดไบต์เดียวกันเสมอ: 137 80 78 71 13 10 26 10

ดังนั้นตัวเลขเวทมนต์ของเอลฟ์จึงเป็นจำนวนไบต์ที่จุดเริ่มต้นของไฟล์เอลฟ์ที่ระบุว่าเป็นเช่นนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.