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ì?
Trả lời
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.
"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
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. –
@MartinKersten chính xác, các tệp bin bắt đầu từ offset 0. – t0mm13b
một số tài nguyên:
- ELF cho kiến trúc ARM
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf - 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]
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.
- 1. Sự khác biệt giữa tệp * .bat và * .cmd là gì?
- 2. Sự khác biệt giữa tệp .so và .lo là gì?
- 3. Sự khác biệt giữa phần .got và .got.plt là gì?
- 4. Sự khác biệt giữa tệp app.config và tệp XYZ.settings là gì?
- 5. Sự khác biệt giữa tệp giải pháp MonoDevelop và tệp Visual Studio Solution là gì?
- 6. Sự khác biệt giữa tệp .cpp và tệp .h là gì?
- 7. Sự khác biệt giữa tệp đối tượng .o và tệp thư viện .so là gì?
- 8. Sự khác biệt giữa các tệp tĩnh và tệp phương tiện trong Django là gì?
- 9. Sự khác nhau giữa tệp .xib và .storyboard là gì?
- 10. Sự khác biệt giữa tệp .msg và tệp .eml
- 11. Sự khác biệt giữa tệp HDF5 và tệp PyTables
- 12. là gì sự khác biệt của phần và phân đoạn trong định dạng file ELF
- 13. Sự khác biệt giữa tệp PCAP với số ma thuật là "0x4d3cb2a1" và "0xd4c3b2a1" là gì?
- 14. Unix: Sự khác biệt giữa nguồn và xuất là gì?
- 15. Sự khác nhau giữa: = và + = trong tạo tệp là gì?
- 16. Sự khác biệt giữa build.sbt và build.scala là gì?
- 17. Sự khác biệt giữa localname và qname là gì?
- 18. Sự khác biệt giữa ResolveUrl và ResolveClientUrl là gì?
- 19. Sự khác biệt giữa tệp: /, file: //, file: ///
- 20. Sự khác biệt giữa định dạng tệp NIB và XIB Interface Builder là gì?
- 21. Sự khác biệt giữa tệp tiêu đề và không gian tên là gì?
- 22. Sự khác biệt cụ thể giữa tệp .msi và setup.exe là gì?
- 23. Sự khác biệt giữa tệp git reset và git checkout file là gì?
- 24. Sự khác biệt giữa% và %% trong một tệp cmd là gì?
- 25. Sự khác biệt giữa hậu tố tệp .cc và .cpp là gì?
- 26. Sự khác biệt giữa phần mở rộng tệp php và html là gì?
- 27. Sự khác biệt giữa tệp cer, pvk và pfx là gì?
- 28. Sự khác nhau giữa tệp apklib và tệp jar là gì?
- 29. Sự khác biệt giữa JavaBean và POJO là gì?
- 30. Sự khác biệt giữa betweeen% INC và @INC là gì?
[Đâ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. –
Đâ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 –