Objektový kód

Z Wikipedie, otevřené encyklopedie

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

  • OpenVMS
    • ELF
    • DWARF – Formát pro debugger a trasování programu

Reference[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]