Plik obiektowy
Plik obiektowy – plik binarny generowany przez kompilator lub asembler podczas kompilacji pliku z kodem źródłowym lub podczas łączenia plików obiektowych przez konsolidator (linker).
Klasyfikacja
[edytuj | edytuj kod]Pliki obiektowe można podzielić na cztery klasy:
- pliki relokowalne (ang. relocatable files)
- pliki wykonywalne (ang. executable files)
- biblioteki dynamiczne (ang. shared object files lub dynamic libraries)
- zrzuty pamięci (ang. core files)
Struktura
[edytuj | edytuj kod]Ze względu na duże podobieństwo plików relokowalnych, plików wykonywalnych, bibliotek dynamicznych oraz zrzutów pamięci współczesne systemy operacyjne stosują jeden format pliku do opisu wszystkich czterech klas plików obiektowych. Oczywiście duże różnice pomiędzy systemami operacyjnymi powodują, że każda z rodzin systemów operacyjnych stosuje własny format. W systemach Unix takim formatem pliku jest Executable and Linkable Format (ELF), a w Microsoft Windows Portable Executable (PE).
Typowy plik obiektowy składa się co najmniej z następujących części:
- nagłówek
- kod i dane binarne
- tablica symboli
- informacje o relokacji
- informacje dla debugera
Nagłówek umieszczany jest zawsze na początku pliku obiektowego i jest analizowany przez konsolidator oraz konsolidator dynamiczny w celu ustalenia dalszego sposobu postępowania z tym plikiem. Nagłówek dostarcza ogólnych informacji o pliku obiektowym takich jak:
- format pliku obiektowego
- kolejność bajtów, w jakiej został zapisany ten plik obiektowy
- klasa pliku obiektowego, która określa, czy dany plik to plik relokowalny, plik wykonywalny, biblioteka dynamiczna lub zrzut pamięci
- architektura procesora, dla którego ten plik został stworzony
- opis reszty pliku obiektowego (podział na sekcje oraz ich rozmiary)
Kod i dane binarne przechowują instrukcje zrozumiałe dla procesora oraz dane wykorzystywane przez te instrukcje. Są one kopiowane do pamięci operacyjnej przy uruchamianiu pliku wykonywalnego lub ładowaniu biblioteki dynamicznej. Pierwsze pliki obiektowe zawierały tylko kod i dane binarne.
Tablica symboli zawiera między innymi opisy funkcji i zmiennych eksportowanych przez plik obiektowy oraz opisy funkcji i zmiennych, do których ten plik się odwołuje. Opis pojedynczego symbolu zawiera:
- nazwę symbolu (funkcji lub zmiennej)
- wartość symbolu – często jest to adres, pod którym dany symbol (funkcja lub zmienna) zostanie umieszczony w pamięci
- rodzaj symbolu
Informacje o relokacji określają miejsca w kodzie binarnym, które należy zmodyfikować podczas konsolidacji. Niektóre z nich są wykorzystywane przy zwykłej konsolidacji, niektóre (informacje o relokacji odwołań do bibliotek dynamicznych) dopiero przy uruchamianiu pliku wykonywalnego.
Informacje dla debugera mogą, ale nie muszą wystąpić w pliku obiektowym. Ich format może stanowić integralną część formatu pliku obiektowego (COFF), albo może być zdefiniowany oddzielnie i wykorzystywany z różnymi formatami plików obiektowych (stabs, DWARF).
Popularne formaty plików obiektowych
[edytuj | edytuj kod]- DOS
- COM
- DOS executable (MZ)
- Relocatable Object Module Format – popularnie zwane plikami „OBJ” lub „OMF”; czasem wykorzystywane w Microsoft Windows
- Unix
- Microsoft Windows
- 16-bit New Executable
- Portable Executable (PE) – używany w 32-bitowych i 64-bitowych wersjach Microsoft Windows