Objektový kód

Z Multimediaexpo.cz

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.

Obsah

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

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

Související články

Reference