Những hình ảnh cuối cùng được tạo ra bởi các trình tuân thủ chứa cả tệp bin và tệp ELf định dạng bộ nạp mở rộng, sự khác biệt giữa hai tệp này là gì, đặc biệt là tiện ích của tệp ELF.
Những hình ảnh cuối cùng được tạo ra bởi các trình tuân thủ chứa cả tệp bin và tệp ELf định dạng bộ nạp mở rộng, sự khác biệt giữa hai tệp này là gì, đặc biệt là tiện ích của tệp ELF.
Câu trả lời:
Tệp Bin là một tệp nhị phân thuần túy không có bản sửa lỗi hoặc định vị bộ nhớ, nhiều khả năng nó có hướng dẫn rõ ràng để được tải tại một địa chỉ bộ nhớ cụ thể. Trong khi....
Các tệp ELF là Định dạng có thể Liên kết Thực thi được bao gồm bảng tra cứu ký hiệu và bảng có thể định vị lại, có nghĩa là, nó có thể được tải tại bất kỳ địa chỉ bộ nhớ nào bởi hạt nhân và tự động, tất cả các ký hiệu được sử dụng, được điều chỉnh theo độ lệch từ địa chỉ bộ nhớ đó. đã được tải 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ố ít ... 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 các tham chiếu bộ nhớ của biểu tượng động vào thời gian chạy.
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 trực tiếp, bạn cần biết địa chỉ cơ sở là gì mặc dù thông thường không có ở đó.
Một tệp elf chứa thông tin bin nhưng nó được bao quanh bởi rất nhiều thông tin khác, thông tin gỡ lỗi có thể có, ký hiệu, có thể phân biệt mã với dữ liệu trong tệp nhị phân. Cho phép nhiều hơn một phần dữ liệu nhị phân (khi bạn kết xuất một trong những phần này vào một thùng rác, bạn sẽ nhận được một tệp bin lớn với dữ liệu điền để đưa nó vào khối tiếp theo). Cho bạn biết bạn có bao nhiêu tệp 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 gặp sự cố khi tạo tệp bin một cách chính xác).
Định dạng tệp elf là một tiêu chuẩn, arm 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 mọi người nên viết một chương trình phân tích cú pháp elf để hiểu những gì trong đó, đừng bận tâm đến thư viện, nó khá đơn giản chỉ cần sử dụng thông tin và cấu trúc trong spec. Giúp khắc phục sự cố gnu nói chung khi tạo tệp .bin cũng như gỡ lỗi tập lệnh trình liên kết và những thứ khác có thể giúp làm rối đầu ra bin hoặc elf của bạn.
một số tài nguyên:
Định dạng ELF thường là đầu ra mặc định của quá trình biên dịch. 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 đối tượng, chẳng hạn như:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
hoặc sử dụng tiện ích fromELF (mặc dù được tích hợp trong hầu hết các IDE như ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Tôi chỉ muốn sửa một điểm ở đây. Tệp ELF được tạo ra bởi Trình liên kết, không phải trình biên dịch.
Nhiệm vụ Trình biên dịch kết thúc sau khi tạo tệp đối tượng (* .o) ra khỏi tệp mã nguồn. Trình liên kết liên kết tất cả các tệp .o với nhau và tạo ra ELF.
ld
tài liệu : Thông thường bước cuối cùng khi biên dịch một chương trình là chạy ld.
NOP
không có-f
(hoặc-fbin
), nó sẽ biên dịch thành một byte duy nhất0x90
, thay vì một vùng chứa ELF 400 byte có-felf32
. Vì vậy, chỉ là mã thô, không có siêu dữ liệu vùng chứa. NASM cho biết nó chủ yếu được sử dụng cho các tệp MS-DOS .COM và .SYS .section
các chỉ thị hầu như bị bỏ qua và chỉ tạo ra sự liên kết.