Crt0

crt0 (také známý jako c0 ) je sada spouštěcích rutin vynucených k propojení doprogramu C. Crt0 provede inicializační práci požadovanou před voláním hlavní funkce .

Typy a použití

Crt0 má obvykle podobu objektového souboru s názvem crt0.o , často napsaný v jazyce symbolických instrukcí , který je automaticky zahrnut linkerem do každého spustitelného souboru , na který odkazuje [1] .

crt0 obsahuje hlavní části runtime knihovny . Práce, kterou vykonává, závisí na kompilátoru, operačním systému a implementaci standardní knihovny. [1] Kromě inicializační práce vyžadované prostředím a sadou nástrojů může crt0 provádět další operace definované programátorem, jako je spouštění globálních konstruktorů C++ a funkcí C, které mají atribut ((constructor)) .

"crt" znamená "C runtime" a nula znamená "úplně začátek". Když jsou však programy kompilovány pomocí GCC, používá se také v jazycích jiných než C. Pro speciální případy použití jsou k dispozici alternativní verze crt0 ; například, aby bylo možné profilování pomocí gprof, programy musí být zkompilovány pomocí gcrt0 . [2]

Příklad crt0.s

Tento příklad je pouze pro Linux x86-64 se syntaxí AT&T bez aktuálního C runtime.

.text .globl_start _ _start: # _start je vstupní bod známý linkeru xor %ebp , %ebp # efektivně RBP := 0, označte konec rámců zásobníku mov ( %rsp ), %edi # získat argc ze zásobníku (implicitně nulově rozšířené na 64-bit) lea 8 ( %rsp ), %rsi # převezme adresu argv ze zásobníku lea 16 ( % rsp , %rdi , 8 ), %rdx # převezme adresu envp ze zásobníku xor %eax , %eax # na ABI a kompatibilita s icc call main # %edi, %rsi, %rdx jsou tři argumenty (z nichž první dva jsou standardní C) k main mov %eax , %edi # přenést návrat hlavního do prvního argumentu _exit xor %eax , %eax # na ABI a kompatibilita s voláním icc _exit # ukončit program

Viz také

Poznámky

  1. 1 2 Inicializace C Runtime, crt0.o . embecosm.com . Datum přístupu: 30. prosince 2013. Archivováno z originálu 30. prosince 2013.
  2. Kompilace programu pro profilování: GNU gprof . sourceware.org . Datum přístupu: 30. prosince 2013. Archivováno z originálu 31. prosince 2013.