Plik obiektowy

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Plik obiektowyplik 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:

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 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:

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]

Linki zewnętrzne[edytuj | edytuj kod]