Objektový kód
Author
Albert FloresObjektový kód, objektový soubor 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. +more 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 . +moredata 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 . +moretext, 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
DOS ** . COM ** . +moreEXE ** Relocatable Object Module Format (dříve známý jako "OBJ file" nebo "OMF", také používaný některými nástroji pro Microsoft Windows).
* 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
* unixové systémy ** a. +moreout ** COFF (System V) *** ECOFF (Mips) *** XCOFF (AIX) ** ELF (SVR4, používaný v moderních systémech) ** Mach-O (NeXT, Mac OS X).
* Microsoft Windows ** 16bitový New Executable (NE) ** Portable Executable (PE)
* 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
[url=http://www.linuxjournal.com/article/1059]The ELF Object File Format: Introduction[/url] - Popis jednotlivých sekcíve formátu ELF (stránka v angličtině)