2010-03-11 53 views
71

Các hình ảnh cuối cùng được tạo bởi người khiếu nại có chứa cả tệp bin và tệp định dạng tệp mở rộng ELf, sự khác biệt giữa hai tệp là gì, đặc biệt là tiện ích của tệp ELF.Sự khác biệt giữa tệp ELF và tệp bin là gì?

+0

[Đây là những gì NASM phải nói] (http://www.nasm.us/doc/nasmdoc7.html#section-7.1). Không phải ARM cụ thể, nhưng có khả năng là cùng một khái niệm. Ví dụ: nếu bạn biên dịch tệp chứa 'NOP' không có' -f' (hoặc '-fbin'), nó biên dịch thành một byte đơn' 0x90', thay vì một vùng chứa ELF 400 byte bằng '-felf32'. Vì vậy, chỉ là mã thô, không có siêu dữ liệu vùng chứa. NASM nói rằng nó chủ yếu được sử dụng cho các tệp MS-DOS .COM và [.SYS] (https://en.wikipedia.org/wiki/.sys). Chỉ thị 'section' hầu hết bị bỏ qua và chỉ tạo liên kết. –

+0

Đây là một cách trong đó các tệp bin có thể hữu ích: để tạo một khu vực khởi động để triển khai các hệ điều hành: http: // stackoverflow.com/a/32483545/895245 –

Trả lời

71

Tệp Bin là một tệp nhị phân thuần túy không có sửa chữa bộ nhớ hoặc di chuyển, nhiều khả năng nó có hướng dẫn rõ ràng để được tải tại địa chỉ bộ nhớ cụ thể. Trong khi đó ....

ELF tệp là định dạng liên kết có thể thực thi bao gồm biểu tượng tra cứu và bảng có thể định vị lại, có thể được tải tại bất kỳ địa chỉ bộ nhớ nào của hạt nhân và tự động, tất cả ký hiệu được sử dụng, được điều chỉnh để bù đắp từ địa chỉ bộ nhớ mà nó được nạp vào. Thông thường các tệp ELF có một số phần, chẳng hạn như 'dữ liệu', 'văn bản', 'bss', để đặt tên nhưng một số ... nó nằm trong các phần mà thời gian chạy có thể tính toán nơi điều chỉnh tham chiếu bộ nhớ của ký hiệu động tại thời gian chạy.

+0

"nhiều khả năng nó có hướng dẫn rõ ràng để được tải tại địa chỉ bộ nhớ cụ thể": điều này có nghĩa là quá trình tạo tệp bin thêm mã bổ sung để tải dữ liệu vào địa chỉ cụ thể không? – xiaobai

+1

Theo tôi đã học được là tệp bin giống như chạy chương trình từ offset 0 và phân đoạn dữ liệu được nhúng bên trong. Nếu điều này là sai, xin vui lòng sửa tôi. –

+0

@MartinKersten chính xác, các tệp bin bắt đầu từ offset 0. – t0mm13b

21

một số tài nguyên:

  1. ELF cho kiến ​​trúc ARM
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. ELF từ wiki
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

định dạng ELF nói chung là sản phẩm mặc định của biên soạn. nếu bạn sử dụng chuỗi công cụ GNU, bạn có thể dịch nó sang định dạng nhị phân bằng cách sử dụng objcopy, chẳng hạn như:

arm-elf-objcopy -O binary [elf-input-file] [binary-output-file] 

hoặc sử dụng fromELF tiện ích (được xây dựng ở hầu hết các IDE như ADS dù):

fromelf -bin -o [binary-output-file] [elf-input-file] 
+1

-1. Điều này không trả lời câu hỏi liên quan đến tệp bin. – xiaobai

+6

Điều này đã được thêm vào sau khi chi tiết tệp bin đã được trả lời, và * không * add-on một kỹ thuật thực tế hữu ích. 1 cho điều đó. – erbdex

26

Một tệp bin chỉ là các bit và byte đi vào rom hoặc một địa chỉ cụ thể mà từ đó bạn sẽ chạy chương trình. Bạn có thể lấy dữ liệu này và tải nó trực tiếp như là, bạn cần phải biết địa chỉ cơ sở là gì mặc dù bình thường không có trong đó.

Tệp elf chứa thông tin thùng nhưng được bao quanh bởi nhiều thông tin khác, thông tin gỡ lỗi có thể, biểu tượng, có thể phân biệt mã từ dữ liệu trong tệp nhị phân. Cho phép nhiều hơn một đoạn dữ liệu nhị phân (khi bạn đổ một trong các dữ liệu này vào thùng, bạn sẽ nhận được một tệp bin lớn có dữ liệu điền để đệm nó vào khối tiếp theo). Cho bạn biết bạn có bao nhiêu nhị phân và có bao nhiêu dữ liệu bss ở đó muốn được khởi tạo thành số không (công cụ gnu có vấn đề khi tạo tệp bin chính xác).

Định dạng tệp elf là chuẩn, cánh tay xuất bản các cải tiến/biến thể của nó trên tiêu chuẩn. Tôi khuyên tất cả mọi người viết một chương trình phân tích cú pháp elf để hiểu những gì có trong đó, không bận tâm với một thư viện, nó là khá đơn giản để chỉ sử dụng thông tin và cấu trúc trong spec. Giúp khắc phục các vấn đề về gnu trong việc tạo các tệp .bin cũng như gỡ lỗi các đoạn mã liên kết và những thứ khác có thể giúp làm hỏng đầu ra của thùng hoặc elf của bạn.

Các vấn đề liên quan