Crt0

crt0 (også kendt som c0 ) er et sæt opstartsrutiner, der er tvunget til at blive forbundet med et C -program . Crt0 udfører det initialiseringsarbejde, der kræves, før hovedfunktionen kaldes .

Typer og anvendelser

Crt0 har normalt form af en objektfil kaldet crt0.o , ofte skrevet i assemblersprog , som automatisk inkluderes af linkeren i hver eksekverbar den linker [1] .

crt0 indeholder hoveddelene af runtime-biblioteket . Det arbejde, det udfører, afhænger af compileren, operativsystemet og implementeringen af ​​standardbiblioteket. [1] Ud over det initialiseringsarbejde, der kræves af miljøet og værktøjssættet, kan crt0 udføre yderligere operationer defineret af programmøren, såsom at udføre C++ globale konstruktører og C-funktioner, der har ((constructor)) attributten .

"crt" betyder "C runtime", og nul betyder "meget begyndelsen". Men når programmer kompileres med GCC, bruges det også på ikke-C sprog. Alternative versioner af crt0 er tilgængelige til specielle brugstilfælde; for at aktivere profilering med gprof, skal programmer kompileres med gcrt0 . [2]

Eksempel crt0.s

Dette eksempel er kun til Linux x86-64 med AT&T-syntaks uden en opdateret C-runtime.

.text .globl_start _ _start: # _start er indgangspunktet kendt af linkeren xor %ebp , %ebp # effektivt RBP := 0, marker slutningen af ​​stak frames mov ( %rsp ), %edi # få argc fra stakken (implicit nul-udvidet til 64-bit) lea 8 ( %rsp ), %rsi # tag adressen på argv fra stakken lea 16 ( %rsp , %rdi , 8 ), %rdx # tag adressen på envp fra stakken x eller % eax , %eax # pr. ABI og kompatibilitet med icc call main # %edi, %rsi, %rdx er de tre args (hvoraf de to første er C-standard) til main mov %eax , %edi # overfør returneringen af ​​main til det første argument af _exit xor %eax , %eax # pr. ABI og kompatibilitet med icc call _exit # afslut programmet

Se også

Noter

  1. 1 2 C Runtime Initialization, crt0.o . embecosm.com . Dato for adgang: 30. december 2013. Arkiveret fra originalen 30. december 2013.
  2. Kompilering af et program til profilering: GNU gprof . sourceware.org . Dato for adgang: 30. december 2013. Arkiveret fra originalen 31. december 2013.