Objektový kód
Objektový kód, objektový soubor (anglicky object code, object file) je v informatice označení pro soubory, které obsahují strojový kód spolu s dalšími informacemi (tzv. metadata). Objektový soubor je rozdělen do několika sekcí. Každá sekce obsahuje data použitá v kódu a metadata, která přidávají informace o datech. Konkrétně to jsou relokační tabulky, velikost jednotlivých sekcí, jejich pozice v objektovém souboru, umístění sekce v paměti. Obsahem dat pak může být samotný kód programu, komentáře, ladící a profilovací informace, konstanty, pozice zásobníku, halda a další.
Objektový soubor může být vytvořen pomocí překladače (nebo linkerem z jiných objektových souborů). Může z něho být vytvořena výsledný spustitelný soubor, knihovna nebo jiná forma spustitelného souboru.
Formáty objektového souboru
Existuje mnoho formátů objektových souborů. Zprvu byl pro každou architekturu jiný typ. v unixových systémech v současné době existují formáty COFF a ELF. Za primitivní objektový kód lze považovat i soubor s příponou .COM, který je jen pouhou posloupností bajtů strojového kódu, která je načtena na pevnou adresu v operační paměti (do jednoho segmentu). Další formáty objektového kódu jsou EXE soubory.
Pro prostředí GNU existuje skupina programů GNU binutils, které s objektovými soubory pracují.
Ukázka výpisu sekcí objektového souboru
Zdrojový soubor:
int main(void) { int j=0xdeadbeef; return j; }
Zkompilován pomocí:
gcc -ffreestanding -nostdlib -Wall -c test.c -o test.o
Má následující sekce:
objdump test.o -h a.out: file format elf32-i386 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000024 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000000 00000000 00000000 00000058 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000058 2**2 ALLOC 3 .comment 00000012 00000000 00000000 00000058 2**0 CONTENTS, READONLY 4 .note.GNU-stack 00000000 00000000 00000000 0000006a 2**0 CONTENTS, READONLY
Je zde sekce .text, tedy kód. Sekce .data, kde jsou globální proměnné a pole (zde žádné není). V sekci .bss jsou neinicializovaná data. Ostatní sekce jsou pak pomocné informace dodány kompilátorem.
Souhrn některých formátů objektového kódu
- Embedded
- IEEE-695
- S-records
- Macintosh
- PEF/CFM
- Mach-O (NEXTSTEP, Mac OS X)
- OpenVMS
- ELF
- DWARF – Formát pro debugger a trasování programu
- ostatní
- Class (file format)
- IBM 360 object format
- NLM
- OMF (VME)
- SOM (HP)
- XBE – Xbox executable
- APP – Symbian OS executable file format
- RDOFF
- Hunk – AmigaOS
- Intel HEX
Reference
- The ELF Object File Format: Introduction - Popis jednotlivých sekcíve formátu ELF (stránka v angličtině)