Ma thuật ELF là gì?


26

Tôi đã thấy thảo luận trước đây về phép thuật ELF, gần đây nhất là các bình luận trong câu hỏi trao đổi ngăn xếp Bảo mật này . Tôi đã thấy nó được đề cập trước đó và tôi đã nhìn thấy nó trong nhật ký khởi động của riêng tôi .. Nhưng tôi không chắc nó là gì.

Trang người đàn ông trên elf hơi quá đầu tôi, vì tôi không làm ngôn ngữ cấp C hoặc cấp thấp hơn.

Là một người sử dụng Linux như một hệ điều hành hàng ngày, ELF là gì?



13
Tiêu đề phù hợp hơn cho rpg stackexchange.
Cthulhu

Câu trả lời:


37

Ngay từ trang người đàn ông bạn tham khảo:

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

ELF định nghĩa định dạng nhị phân của các tệp thực thi được sử dụng bởi Linux. Khi bạn gọi một tệp thực thi, HĐH phải biết cách tải tệp thực thi vào bộ nhớ đúng cách, cách giải quyết các phụ thuộc thư viện động và sau đó nhảy vào tệp thực thi được tải để bắt đầu thực thi nó. Định dạng ELF cung cấp thông tin này. Phép thuật ELF được sử dụng để xác định các tệp ELF và chỉ là vài byte đầu tiên của tệp:

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

hoặc là

% 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 này xác định rõ ràng một tệp là tệp thực thi ELF. Nhiều định dạng tệp có byte "ma thuật" thực hiện cùng một nhiệm vụ - xác định một loại tệp.


8
Phép thuật thực tế chỉ là bốn byte đầu tiên. Các trường sau đây mô tả về tuổi thọ, kiến ​​trúc CPU và nhiều thứ khác.
Simon Richter

@SimonRichter sôi sục về ngữ nghĩa. 4 byte đầu tiên là ma thuật để nhận dạng chung cho nhiều loại tệp, nhưng người hỏi đã chỉ định "ma thuật ELF", thậm chí readelfthừa nhận là 16 byte.
casey

2
Nếu bạn muốn có được kỹ thuật thực sự, 16 byte đầu tiên là "nhận dạng" ( e_ident), trong đó 4 byte đầu tiên là số ma thuật ( EI_MAG0thông qua EI_MAG3)
Michael Mrozek

1
@slebetman Việc sử dụng "ma thuật" của tôi xuất phát từ thông số ELF: "4 byte đầu tiên của một tệp chứa 'số ma thuật', xác định tệp là tệp đối tượng ELF"
Michael Mrozek

2
"Rõ ràng" là cường điệu một chút. Trừ khi bạn biết tập tin đến từ đâu, bất cứ điều gì chỉ là phỏng đoán. /binChắc chắn, một tệp trong đó chắc chắn là tệp nhị phân ELF. Một số tệp ngẫu nhiên bạn đã tải xuống, mặc dù ... không có gì để nói.
cHao

11

"Số ma thuật" là tên được đặt cho các chuỗi byte (thường) ở đầu các tệp, được sử dụng để đánh dấu các tệp đó là định dạng tệp cụ thể. Chúng phục vụ một mục đích tương tự như phần mở rộng tập tin.

Xem mục nhập tệp biệt ngữ để biết thêm thông tin.

Ví dụ: hình ảnh PNG luôn bắt đầu với cùng tám byte: 137 80 78 71 13 10 26 10

Do đó, số ma thuật ELF là các byte ở đầu tập tin elf xác định chúng là như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.