Końcowe obrazy utworzone przez autorów zgodności zawierają zarówno plik bin, jak i plik ELf w formacie rozszerzonego modułu ładującego, jaka jest różnica między nimi, zwłaszcza użyteczność pliku ELF.
Końcowe obrazy utworzone przez autorów zgodności zawierają zarówno plik bin, jak i plik ELf w formacie rozszerzonego modułu ładującego, jaka jest różnica między nimi, zwłaszcza użyteczność pliku ELF.
Odpowiedzi:
Plik Bin jest czystym plikiem binarnym bez poprawek pamięci lub relokacji, najprawdopodobniej zawiera wyraźne instrukcje do załadowania pod określony adres pamięci. Natomiast....
Pliki ELF to wykonywalny format, który można połączyć, który składa się z wyszukiwania symboli i tabeli relokowalnej, to znaczy może być ładowany na dowolny adres pamięci przez jądro i automatycznie, wszystkie używane symbole są dostosowywane do przesunięcia z tego adresu pamięci, w którym się znajdują został załadowany do. Zwykle pliki ELF mają wiele sekcji, takich jak `` dane '', `` tekst '', `` bss '', aby wymienić tylko kilka ... to w tych sekcjach środowisko wykonawcze może obliczyć, gdzie dostosować odwołania do pamięci symbolu dynamicznie w czasie wykonywania.
Plik bin to tylko bity i bajty, które trafiają do pamięci ROM lub określonego adresu, z którego uruchomisz program. Możesz pobrać te dane i załadować je bezpośrednio w obecnej postaci, ale musisz wiedzieć, jaki jest adres bazowy, ponieważ zwykle go tam nie ma.
Plik elf zawiera informacje bin, ale jest otoczony wieloma innymi informacjami, możliwymi informacjami debugowania, symbolami, które mogą odróżnić kod od danych w pliku binarnym. Pozwala na więcej niż jedną porcję danych binarnych (kiedy zrzucisz jeden z nich do kosza, otrzymasz jeden duży plik bin z danymi wypełnienia, aby dopełnić go do następnego bloku). Informuje, ile masz plików binarnych i ile jest danych bss, które chcą zostać zainicjalizowane do zera (narzędzia gnu mają problemy z poprawnym tworzeniem plików bin).
Format pliku elf jest standardem, ramię publikuje swoje ulepszenia / odmiany w standardzie. Zalecam każdemu napisanie programu do analizy elfów, aby zrozumieć, co się w nim znajduje, nie przejmuj się biblioteką, po prostu skorzystaj z informacji i struktur w specyfikacji. Pomaga przezwyciężyć problemy z GNU w tworzeniu plików .bin, a także debugować skrypty linkera i inne rzeczy, które mogą zepsuć wyjście bin lub elf.
niektóre zasoby:
Format ELF jest ogólnie domyślnym wynikiem kompilacji. jeśli używasz łańcuchów narzędzi GNU, możesz przetłumaczyć je na format binarny za pomocą objcopy, na przykład:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
lub używając narzędzia fromELF (wbudowanego w większość IDE, takich jak ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Chcę tylko poprawić tutaj punkt. Plik ELF jest tworzony przez konsolidatora, a nie przez kompilator.
Misja kompilatora kończy się po utworzeniu plików obiektowych (* .o) z plików kodu źródłowego. Linker łączy wszystkie pliki .o razem i tworzy ELF.
ld
dokumentacji : Zwykle ostatnim krokiem kompilacji programu jest uruchomienie ld.
NOP
bez-f
(lub-fbin
), kompiluje się on do pojedynczego bajtu0x90
, zamiast do 400-bajtowego kontenera ELF z-felf32
. Więc tylko surowy kod, bez metadanych kontenera. NASM twierdzi, że jest używany głównie do plików MS-DOS .COM i .SYS .section
dyrektywy są przeważnie ignorowane i tylko generują wyrównanie.