2010-03-11 9 views
71

Ostateczne obrazy wygenerowane przez kompilatory zawierają zarówno plik bin, jak i rozszerzony format pliku ELF, czym różnią się między sobą, szczególnie przydatność pliku ELF.Jaka jest różnica między plikami ELF i bin?

+0

[To jest to, co NASM ma do powiedzenia] (http://www.nasm.us/doc/nasmdoc7.html#section-7,1). Nie specyficzne dla ARM, ale może być to ta sama koncepcja. Np. Jeśli skompilujesz plik zawierający 'NOP' bez' -f' (lub '-fbin'), kompiluje się on do pojedynczego bajtu' 0x90', zamiast do 400 bajtowego kontenera ELF z '-felf32'. Więc tylko surowy kod, bez metadanych kontenera. NASM mówi, że jest używany głównie w plikach MS-DOS .COM i [.SYS] (https://en.wikipedia.org/wiki/.sys). Dyrektywy 'section' są w większości ignorowane i generują tylko wyrównanie. –

+0

Jest to jeden ze sposobów, w jaki pliki bin mogą być przydatne: aby sektor rozruchowy wdrożył systemy operacyjne: http: // stackoverflow.pl/a/32483545/895245 –

Odpowiedz

71

Plik Bin jest czystym plikiem binarnym bez żadnych poprawek pamięciowych ani relokacji, bardziej niż prawdopodobne jest, że ma wyraźne instrukcje do załadowania pod konkretny adres pamięci. Zważywszy, że ...

Pliki ELF są wykonalne do utworzenia formatu, który składa się z wyszukiwania symboli i tabeli relokowalnej, to znaczy, że może być załadowany na dowolny adres pamięci przez jądro i automatycznie, wszystkie użyte symbole, są korygowane do przesunięcia z tego adresu pamięci, w którym został załadowany. Zwykle pliki ELF mają pewną liczbę sekcji, takich jak "dane", "tekst", "bss", aby wymienić tylko kilka ... znajduje się w tych sekcjach, gdzie czas pracy może obliczyć, gdzie dostosować odniesienia pamięci symbolu dynamicznie w czasie wykonywania.

+0

"Prawdopodobnie ma wyraźne instrukcje do załadowania na określony adres pamięci": czy to oznacza, że ​​proces generowania pliku bin dodaje dodatkowy kod do ładowania danych pod konkretny adres? – xiaobai

+1

O ile się dowiedziałem, plik bin jest jak uruchomienie programu z przesunięcie 0 i segment danych jest osadzony w. Jeśli to nie pomoże, popraw mnie. –

+0

@MartinKersten prawidłowe, pliki bin zaczynają się od przesunięcia 0. – t0mm13b

21

niektóre zasoby:

  1. ELF dla architektury ARM
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. ELF z wiki
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

formacie ELF jest zwykle domyślnym wyjście kompilacji. jeśli używasz łańcuchów narzędzi GNU, można przełożyć je do formatu binarnego za pomocą objcopy, takich jak:

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

lub przy użyciu narzędzia fromELF (zbudowany w większości IDE takich jak ADS chociaż):

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

-1. Nie odpowiada to na pytanie, czym jest plik bin. – xiaobai

+6

Zostało to dodane po uzyskaniu odpowiedzi na szczegóły dotyczące pliku bin, a * robi * dodanie praktycznie użytecznej techniki. +1 za to. – erbdex

26

Plik bin to tylko bity i bajty, które wchodzą do romu lub adres, z którego będzie uruchamiany program. Możesz wziąć te dane i załadować je bezpośrednio, ponieważ musisz wiedzieć, jaki jest adres bazowy, ponieważ zwykle tam nie ma.

Plik elfa zawiera informacje o bin, ale jest otoczony wieloma innymi informacjami, możliwymi informacjami debugowania, symbolami, może odróżnić kod od danych w pliku binarnym. Zezwala na więcej niż jeden fragment danych binarnych (po zrzuceniu jednego z nich do bin dostajemy jeden duży plik bin z danymi wypełnienia, aby przenieść go do następnego bloku). Informuje, ile masz danych binarnych i ile danych bss ma zamiar zainicjować na zera (narzędzia gnu mają problemy z prawidłowym tworzeniem plików bin).

Format pliku elfa jest standardem, ramię publikuje swoje ulepszenia/odmiany w standardzie. Polecam każdemu, kto pisze program analizujący elfa, aby zrozumieć, co tam jest, nie przejmuj się biblioteką, jest całkiem proste, aby użyć informacji i struktur w specyfikacji. Pomaga przezwyciężyć problemy z gnu w generowaniu plików .bin, a także w debugowaniu skryptów linkerów i innych rzeczy, które mogą pomóc zepsuć wydruki bin lub elfa.

Powiązane problemy