2010-03-11 6 views
71

Compliers tarafından üretilen son görüntüler, hem bin dosyası hem de genişletilmiş yükleyici formatı ELf dosyasını içerir, ikisi arasındaki fark nedir, özellikle de ELF dosyasının kullanımı.ELF dosyaları ve bin dosyaları arasındaki fark nedir?

+0

[Bu NASM'ın söylediği şeydir] (http://www.nasm.us/doc/nasmdoc7.html#section-7.1). ARM değil, aynı konsept olması muhtemel. Örn. -f '(veya '-fbin') olmadan sadece' NOP 'içeren bir dosya derlerseniz,' -felf32' ile 400 baytlık bir ELF konteynırı yerine, tek bir bayt '0x90' derler. Yani sadece ham kod, konteyner meta verileri yok. NASM çoğunlukla MS-DOS .COM ve [.SYS] (https://en.wikipedia.org/wiki/.sys) dosyaları için kullanıldığını söylüyor. 'bölüm' yönergeleri çoğunlukla göz ardı edilir ve yalnızca hizalama oluşturur. –

+0

Bu, bin dosyalarının yararlı olabileceği bir yoldur: işletim sistemlerini dağıtmak için bir önyükleme kesimi yapmak: http: // stackoverflow.com/a/32483545/895245 –

cevap

71

Bir Bin dosyası, belirli bir bellek adresinde yüklenecek açık yönergeler olması olasılığından daha fazla bellek düzeltmesi veya yeniden yerleştirme yapılmadan saf ikili bir dosyadır. Halihazırda, bir sembol araması ve yeniden yerleştirilebilir tablodan oluşan Çalıştırılabilir Linkable Formatıdır, yani, herhangi bir bellek adresine çekirdek tarafından yüklenebilir ve otomatik olarak, kullanılan tüm semboller ayarlanır. Yüklendiği yerdeki hafıza adresinden ofset. Genellikle ELF dosyaları 'veri', 'metin', 'bss' gibi bir dizi bölümden oluşur, ancak bunlardan birkaçı ... bu, çalışma zamanının sembolün hafıza referanslarını nerede ayarlayacağını hesaplayabileceği bölümlerin içinde yer alır. Dinamik olarak çalışma zamanında.

+0

"büyük ihtimalle belirli bir bellek adresinde yüklenecek açık yönergeler var": bu, bin dosya oluşturma işlemi, belirli bir adrese veri yüklemek için ek kod ekler anlamına mı geliyor? – xiaobai

+1

Şu ana kadar öğrendiğim gibi bin dosyası, programı offset 0'dan çalıştırmak gibidir ve veri segmenti içine gömülür. Bu yanlışsa lütfen beni düzeltin. –

+0

@MartinKersten doğru, bin dosyaları ofset 0'dan başlar. – t0mm13b

21

bazı kaynaklar: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

ELF formatında wiki
gelen ARM mimarisi
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf

  • ELF için

    1. ELF genellikle derleme varsayılan çıkış olduğunu. (Örneğin olsa ADS gibi çoğu IDE yerleşik)

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

      veya fromELF yardımcı programını kullanarak: Eğer GNU aracı zincirleri kullanırsanız , aşağıdakiler gibi, objcopy kullanarak ikili biçime çevirebilir

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

    -1. Bu, bin dosyasının ne olduğuyla ilgili soruya cevap vermiyor. – xiaobai

    +6

    Bu, bin dosyası ayrıntısı yanıtlandıktan sonra eklendi ve * pratik olarak kullanışlı bir teknik ekliyor *. Bunun için +1. – erbdex

    26

    Bir bin dosyası, rom ya da programı çalıştıracağınız belirli bir adrese giden bit ve baytlardır. Bu verileri alabilir ve doğrudan olduğu gibi yükleyebilirsiniz, normalde orada bulunmadığı için temel adresin ne olduğunu bilmeniz gerekir.

    Elf dosyası çöp kutusu bilgilerini içerir, ancak başka birçok bilgi ile çevrelenir, olası hata ayıklama bilgisi, semboller, ikilideki verilerden kodu ayırt edebilir. Birden fazla ikili veri yığınına izin verir (bunlardan birini çöp kutusuna attığınız zaman, bir sonraki bölüme sığdırmak için dolgu verisi içeren büyük bir bin dosyası alırsınız). Ne kadar ikili olduğunuzu ve sıfırlar için sıfırlanması gereken ne kadar bss verisi olduğunu söyler (gnu araçlarının, bin dosyalarını doğru şekilde oluşturma sorunları vardır).

    Elf dosya formatı standarttır, kol geliştirmelerini/varyasyonlarını standartta yayınlar. Herkesin içinde ne olduğunu anlamak için bir elf ayrıştırma programı yazmasını öneririm, bir kütüphaneyle uğraşmazsınız, sadece bilgi ve yapıları spesifikasyonlarda kullanmak oldukça basittir. Genel olarak, .bin dosyalarının oluşturulmasında gnu sorunlarının üstesinden gelmeye yardımcı olur. Ayrıca, hata ayıklama betik betikleri ve bin ya da elf çıktınızı bozmaya yardımcı olabilecek diğer şeyler de giderilir.