Crt0

crt0 (tunnetaan myös nimellä c0 ) on joukko käynnistysrutiineja, jotka onpakko linkittää C -ohjelmaan . Crt0 tekee tarvittavat alustustyöt ennen pääfunktion kutsumista .

Tyypit ja käyttötarkoitukset

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]

Esimerkki crt0.s

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

Katso myös

Muistiinpanot

  1. 1 2 C Runtime Initialization, crt0.o . embecosm.com . Käyttöpäivä: 30. joulukuuta 2013. Arkistoitu alkuperäisestä 30. joulukuuta 2013.
  2. Profilointiohjelman kääntäminen: GNU gprof . sourceware.org . Käyttöpäivä: 30. joulukuuta 2013. Arkistoitu alkuperäisestä 31. joulukuuta 2013.