Gambar akhir yang dihasilkan oleh pelengkap berisi file bin dan file ELf format loader yang diperluas, apa perbedaan antara keduanya, terutama utilitas file ELF.
Gambar akhir yang dihasilkan oleh pelengkap berisi file bin dan file ELf format loader yang diperluas, apa perbedaan antara keduanya, terutama utilitas file ELF.
Jawaban:
File Bin adalah file biner murni tanpa perbaikan atau relokasi memori, kemungkinan besar ia memiliki instruksi eksplisit untuk dimuat di alamat memori tertentu. Sedangkan....
File ELF adalah Executable Linkable Format yang terdiri dari pencarian simbol dan tabel yang dapat direlokasi, yaitu, dapat dimuat di alamat memori mana pun oleh kernel dan secara otomatis, semua simbol yang digunakan, disesuaikan dengan offset dari alamat memori itu. dimuat ke. Biasanya file ELF memiliki sejumlah bagian, seperti 'data', 'text', 'bss', untuk menyebutkan beberapa ... itu di dalam bagian-bagian di mana run-time dapat menghitung di mana untuk menyesuaikan referensi memori simbol secara dinamis pada saat run-time.
File bin hanyalah bit dan byte yang masuk ke rom atau alamat tertentu tempat Anda akan menjalankan program. Anda dapat mengambil data ini dan memuatnya secara langsung apa adanya, Anda perlu tahu apa alamat dasarnya karena biasanya tidak ada di sana.
Sebuah file elf berisi informasi bin tetapi dikelilingi oleh banyak informasi lain, kemungkinan info debug, simbol, dapat membedakan kode dari data dalam biner. Memungkinkan lebih dari satu potongan data biner (saat Anda membuang salah satunya ke bin, Anda mendapatkan satu file bin besar dengan data isian untuk dimasukkan ke blok berikutnya). Memberi tahu Anda berapa banyak biner yang Anda miliki dan berapa banyak data bss yang ingin diinisialisasi ke nol (alat gnu mengalami masalah dalam membuat file bin dengan benar).
Format file elf adalah standar, lengan menerbitkan penyempurnaan / variasinya pada standar. Saya merekomendasikan semua orang menulis program parsing elf untuk memahami apa yang ada di sana, jangan repot-repot dengan perpustakaan, cukup sederhana untuk hanya menggunakan informasi dan struktur dalam spesifikasi. Membantu mengatasi masalah gnu pada umumnya membuat file .bin serta men-debug skrip linker dan hal-hal lain yang dapat membantu mengacaukan keluaran bin atau elf Anda.
beberapa sumber:
Format ELF umumnya merupakan keluaran default dari kompilasi. jika Anda menggunakan rantai alat GNU, Anda dapat menerjemahkannya ke format biner dengan menggunakan objcopy, seperti:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
atau menggunakan utilitas fromELF (meskipun dibangun di sebagian besar IDE seperti ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Saya hanya ingin mengoreksi satu hal di sini. File ELF diproduksi oleh Linker, bukan oleh compiler.
Misi Compiler berakhir setelah menghasilkan file objek (* .o) dari file kode sumber. Linker menghubungkan semua file .o menjadi satu dan menghasilkan ELF.
ld
dokumentasinya : Biasanya langkah terakhir dalam menyusun program adalah menjalankan ld.
NOP
tanpa-f
(atau-fbin
), file tersebut akan dikompilasi menjadi satu byte0x90
, bukan kontainer ELF 400 byte dengan-felf32
. Jadi hanya kode mentahnya, tidak ada metadata penampung. NASM mengatakan itu sebagian besar digunakan untuk file MS-DOS .COM dan .SYS .section
arahan sebagian besar diabaikan dan hanya menghasilkan keselarasan.