crt0 (tunnetaan myös nimellä c0 ) on joukko käynnistysrutiineja, jotka onpakko linkittää C -ohjelmaan . Crt0 tekee tarvittavat alustustyöt ennen pääfunktion kutsumista .
Crt0 on yleensä muodoltaan objektitiedosto nimeltä crt0.o , joka on usein kirjoitettu kokoonpanokielellä ja jonka linkki sisällyttää automaattisesti jokaiseen sen linkittämiin suoritettaviin tiedostoihin [1] .
crt0 sisältää ajonaikaisen kirjaston pääosat . Sen tekemä työ riippuu kääntäjästä, käyttöjärjestelmästä ja vakiokirjaston toteutuksesta. [1] Ympäristön ja työkalujoukon edellyttämän alustustyön lisäksi crt0 voi suorittaa ohjelmoijan määrittämiä lisätoimintoja, kuten suorittaa globaaleja C++ konstruktoreita ja C-funktioita, joilla on ((constructor)) -attribuutti .
"crt" tarkoittaa "C-ajoaikaa" ja nolla tarkoittaa "hyvin alussa". Kuitenkin, kun ohjelmat käännetään GCC:llä, sitä käytetään myös muilla kuin C-kielillä. Vaihtoehtoisia versioita crt0 :sta on saatavana erityiskäyttötapauksiin; Esimerkiksi gprof- profiloinnin mahdollistamiseksi ohjelmat on käännettävä komennolla gcrt0 . [2]
Tämä esimerkki koskee vain Linux x86-64 :ää AT&T-syntaksilla ilman ajan tasalla olevaa C-ajoaikaa.
.text .globl_start _ _start: # _start on linkkerin tuntema sisääntulopiste xor %ebp , %ebp # tehokkaasti RBP := 0, merkitse pinon kehysten loppu mov ( %rsp ), %edi # get argc pinosta (implisiittisesti nolla-laajennettu 64-bittiseen) lea 8 ( %rsp ), %rsi # ottaa argv:n osoitteen pinosta lea 16 ( % rsp , %rdi , 8 ), %rdx # ottaa envp:n osoitteen pinosta xtai % eax , %eax # per ABI ja yhteensopivuus icc : n kanssa main mov %eax , %edi # siirtävät main:n palautuksen ensimmäiseen argumenttiin _exit xor %eax , %eax # per ABI ja yhteensopivuus icc -kutsun _exit # kanssa lopettaa ohjelman