Kompilator i asembler tworzą plik obiektowy, zawierający wygenerowany kod binarny oraz pewne dodatkowe dane. Linker łączy wiele plików obiektowych w jeden. Loader bierze plik obiektowy i ładuje go do pamięci.
Co składa się na plik obiektowy?
• Informacje nagłówkowe: ogólne informacje o pliku, takie jak rozmiar kodu, nazwa pliku źródłowego, data powstania
• Kod wynikowy: instrukcje binarne i dane wygenerowane przez kompilator i asembler
• Relokacja: lista miejsc w kodzie, które muszą zostać poprawione, kiedy linker zmienia adresy kodu wynikowego
• Symbole: symbole globalne, zdefiniowane w danym module, symbole, które mają zostać zaimportowane z innego modułu lub zdefiniowane przez linker
• Informacje do debuggowania: inne informacje o kodzie wynikowym (nie są potrzebne linkerowi, ale przydadzą się podczas debuggowania), mogą to być np. informacje o kodzie źródłowym, numerach linii, zmiennych lokalnych, strukturach danych, używanych przez kod wynikowy
Niektóre formaty plików obiektowych zawierają więcej informacji, niektóre zawierają ich mniej.
Projektowanie formatu pliku obiektowego:
Plik może być:
• linkowalny (linkable) - używany jako input dla linkera
• wykonywalny (executable) - może być ładowany do pamięci i uruchamiany jako program
• ładowalny (loadable) - może być ładowany do pamięci jako biblioteka razem z programem
• wszelkie możliwe kombinacje trzech powyższych
Format pliku typu NULL (nuli object format): MS-DOS pliki .COM
Jest to najbardziej znany przykład formatu pliku, który nie posiada żadnych dodatkowych informacji poza kodem binarnym. Jedyne co ma do zrobienia