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 .
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]
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