Objektový soubor - Object file

Soubor objekt je počítačový soubor obsahující objektový kód , to znamená, strojový kód výstup o assembleru a kompilátor . Objektový kód je obvykle přemístitelný a není obvykle přímo spustitelný . Objektové soubory mají různé formáty a stejný strojový kód lze zabalit do různých formátů objektových souborů. Objektový soubor může fungovat také jako sdílené knihovny .

Kromě samotného kódu objektu mohou objektové soubory obsahovat metadata používaná k propojení nebo ladění, včetně: informací k vyřešení symbolických křížových odkazů mezi různými moduly, informací o přemístění, informací o odvíjení zásobníku , komentářů , symbolů programu , informací o ladění nebo profilování . Další metadata mohou zahrnovat datum a čas kompilace, název a verzi kompilátoru a další identifikační údaje.

Pojem „objektový program“ pochází minimálně z 50. let minulého století:

Termín v automatickém programování pro program strojového jazyka vytvořený strojem překladem zdrojového programu napsaného programátorem do jazyka podobného algebraickému zápisu.

Počítačový programátor generuje objektový kód pomocí kompilátoru nebo assembleru . Například v Linuxu bude kompilátor GNU Compiler Collection generovat soubory s příponou .o, které používají formát ELF . Kompilace v systému Windows generuje soubory s příponou .obj, které používají formát COFF . Linker se pak použije ke kombinaci kódu objektu do jednoho spustitelného programu nebo knihovny, která podle potřeby natáhne předkompilované systémové knihovny. Programy JavaScript jsou interpretovány, zatímco programy Python a Java jsou kompilovány do souborů bytecode .

Formáty objektových souborů

Existuje mnoho různých formátů objektových souborů; původně každý typ počítače měl svůj vlastní jedinečný formát, ale s příchodem Unixu a dalších přenosných operačních systémů byly některé formáty, jako například ELF a COFF , definovány a používány na různých typech systémů. Je možné, aby byl stejný formát použit jako vstup i výstup linkeru , a tedy jako formát knihovny a spustitelného souboru. Některé formáty mohou obsahovat strojový kód pro různé procesory, přičemž správný je vybrán operačním systémem při načtení programu.

Některé systémy rozlišují mezi přímo spustitelnými formáty a formáty, které vyžadují zpracování linkerem. Například OS/360 a následníci nazývají první formát zaváděcím modulem a druhý objektovým modulem . V tomto případě mají soubory zcela odlišné formáty.

Návrh a/nebo volba formátu souboru objektu je klíčovou součástí celkového návrhu systému. Ovlivňuje výkon linkeru a tím i obrat programátora během vývoje programu. Pokud je formát použit pro spustitelné soubory, návrh také ovlivňuje dobu, po kterou programy začínají běžet , a tím i odezvu pro uživatele.

Soubory absolutních objektů

Mnoho raných počítačů nebo malých mikropočítačů podporuje pouze absolutní objektový formát. Programy nelze přemístit; je třeba je sestavit nebo zkompilovat ke spuštění na konkrétních, předdefinovaných adresách. Soubor neobsahuje žádné informace o přemístění nebo propojení. Tyto soubory lze načíst do paměti pro čtení/zápis nebo uložit do paměti pouze pro čtení . Například monitor MIKBUG Motorola 6800 obsahuje rutinu pro čtení souboru absolutních objektů ( formát SREC ) z papírové pásky . Soubory DOS COM jsou novějším příkladem souborů absolutních objektů.

Segmentace

Většina formátů objektových souborů je strukturována jako samostatné části dat, z nichž každá obsahuje určitý typ dat. Tyto sekce jsou známé jako „segmenty“ díky výrazu „ paměťový segment “, což byla dříve běžná forma správy paměti . Když je program načten do paměti zavaděčem , zavaděč přidělí programu různé oblasti paměti. Některé z těchto oblastí odpovídají segmentům souboru objektu, a proto jsou obvykle známy pod stejnými názvy. Jiné, například zásobník, existují pouze za běhu. V některých případech se přemístění provádí zavaděčem (nebo linkerem) za účelem určení skutečných adres paměti. U mnoha programů nebo architektur však není přemístění nutné, protože je zpracováváno jednotkou pro správu paměti nebo kódem nezávislým na poloze . Na některých systémech pak lze segmenty souboru objektu zkopírovat (stránkovat) do paměti a spustit, aniž by bylo nutné další zpracování. V těchto systémech to lze provést líně , to znamená pouze tehdy, když jsou na segmenty během provádění odkazovány, například prostřednictvím souboru mapovaného paměti zálohovaného souborem objektu.

Typy dat podporované typickými formáty objektových souborů:

Segmenty v různých souborech objektů může spojovač kombinovat podle pravidel určených při definování segmentů. Pro segmenty sdílené mezi soubory objektů existují konvence; například v DOSu existují různé paměťové modely, které určují názvy speciálních segmentů a zda je lze kombinovat.

Informace o ladění mohou být buď nedílnou součástí formátu objektového souboru, jako je tomu v případě COFF , nebo polonezávislým formátem, který lze použít s několika formáty objektů, jako jsou bodnutí nebo DWARF .

GNU Project ‚s Binary Descriptor File knihovna (BFD knihovna) poskytuje společné API pro manipulaci s objektových souborů v různých formátech.

Reference

Další čtení