Derleyiciler tarafından üretilen son görüntüler hem bin dosyası hem de genişletilmiş yükleyici biçimi ELf dosyası içerir, ikisi arasındaki fark, özellikle ELF dosyasının faydası nedir.
Derleyiciler tarafından üretilen son görüntüler hem bin dosyası hem de genişletilmiş yükleyici biçimi ELf dosyası içerir, ikisi arasındaki fark, özellikle ELF dosyasının faydası nedir.
Yanıtlar:
Bin dosyası, bellek düzeltmeleri veya yer değiştirmeleri içermeyen saf bir ikili dosyadır ve büyük olasılıkla belirli bir bellek adresine yüklenecek açık talimatlara sahiptir. Buna karşılık....
ELF dosyaları, bir sembol aramaları ve yeniden konumlandırılabilir tablodan oluşan Yürütülebilir Bağlanabilir Biçimdir, yani çekirdek tarafından herhangi bir bellek adresine yüklenebilir ve otomatik olarak, kullanılan tüm semboller, bulunduğu bellek adresinden uzaklığa ayarlanır. içine yüklendi. Genellikle ELF dosyalarında 'veri', 'metin', 'bss' gibi bir dizi bölüm vardır, ancak birkaçı ... bu, çalışma zamanının sembolün bellek referanslarını nerede ayarlayacağını hesaplayabileceği bölümlerdedir çalışma zamanında dinamik olarak.
Bin dosyası, rom'a giren bitler ve baytlar veya programı çalıştıracağınız belirli bir adrestir. Bu verileri alıp doğrudan olduğu gibi yükleyebilirsiniz, normalde orada olmadığı için temel adresin ne olduğunu bilmeniz gerekir.
Bir elf dosyası, bin bilgisini içerir, ancak birçok başka bilgi, olası hata ayıklama bilgileri, sembollerle çevrilidir, kodu ikili dosyadaki verilerden ayırt edebilir. Birden fazla ikili veri yığınına izin verir (bunlardan birini bir bölmeye döktüğünüzde, onu bir sonraki bloğa doldurmak için doldurma verileri içeren büyük bir bölme dosyası elde edersiniz). Ne kadar ikiliye sahip olduğunuzu ve sıfırlara ilklendirilmek isteyen ne kadar bss verisi olduğunu söyler (gnu araçlarının bin dosyalarını doğru şekilde oluşturmada sorunları vardır).
Elf dosya formatı bir standarttır, arm, geliştirmelerini / varyasyonlarını standart üzerinde yayınlar. Herkesin içinde ne olduğunu anlamak için bir elf ayrıştırma programı yazmasını tavsiye ederim, bir kitaplıkla uğraşmayın, sadece spesifikasyondaki bilgileri ve yapıları kullanmak oldukça basittir. Genel olarak .bin dosyaları oluştururken, bağlayıcı betikleri ve bin veya elf çıktınızı bozmaya yardımcı olabilecek diğer şeylerde hata ayıklama gibi gnu sorunlarının üstesinden gelmeye yardımcı olur.
bazı kaynaklar:
ELF formatı genellikle derlemenin varsayılan çıktısıdır. GNU araç zincirlerini kullanıyorsanız, objcopy kullanarak bunu ikili biçime çevirebilirsiniz, örneğin:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
veya ELF yardımcı programını kullanarak (ancak ADS gibi çoğu IDE'de yerleşiktir):
fromelf -bin -o [binary-output-file] [elf-input-file]
Sadece bir noktayı düzeltmek istiyorum. ELF dosyası, derleyici tarafından değil, Bağlayıcı tarafından üretilir.
Derleyici görevi, kaynak kod dosyalarından nesne dosyalarını (* .o) ürettikten sonra sona erer. Bağlayıcı, tüm .o dosyalarını birbirine bağlar ve ELF'yi oluşturur.
ld
Belgelerden alıntılanmıştır : Genellikle bir programı derlemenin son adımı ld'yi çalıştırmaktır.
NOP
olmadan-f
(ya-fbin
), tek bayt derler0x90
yerine bir 400 bayt ELF kabın,-felf32
. Yani sadece ham kod, kapsayıcı meta verileri yok. NASM, çoğunlukla MS-DOS .COM ve .SYS dosyaları için kullanıldığını söylüyor .section
yönergeler çoğunlukla göz ardı edilir ve yalnızca hizalama oluşturur.