crt0 - crt0

crt0 (auch bekannt als c0 ) ist ein Satz von Startroutinen für die Ausführung, die mit einem C- Programm verknüpft sind undalle erforderlichen Initialisierungsarbeitenausführen, bevor die Hauptfunktion des Programms aufgerufen wird .

Form und Verwendung

Crt0 hat im Allgemeinen die Form einer Objektdatei namens crt0.o , die oft in Assembler geschrieben ist und vom Linker automatisch in jede von ihm erstellte ausführbare Datei eingefügt wird .

crt0 enthält die grundlegendsten Teile der Laufzeitbibliothek . Daher hängt die genaue Arbeit, die es verrichtet, vom Compiler, dem Betriebssystem und der Implementierung der C-Standardbibliothek des Programms ab . Neben der Arbeit der Initialisierung durch die Umwelt und die erforderlichen Werkzeugkette , crt0 kann zusätzliche Operationen durch den Programmierer, wie die Ausführung definiert auszuführen C ++ globale Konstruktoren und C Funktionen tragen GCC ‚s ((Konstruktor)) Attribut.

„crt“ steht für „C-Laufzeit“ und die Null steht für „ganz am Anfang“. Wenn Programme mit GCC kompiliert werden, wird es jedoch auch für andere Sprachen als C verwendet. Für spezielle Anwendungsszenarien stehen alternative Versionen von crt0 zur Verfügung; Um beispielsweise die Profilerstellung mit gprof zu aktivieren , müssen Programme stattdessen mit gcrt0 kompiliert werden.

Beispiel crt0.s

Dieses Beispiel gilt für Linux x86-64 mit AT&T-Syntax , ohne eine tatsächliche C-Laufzeit.

.text

.globl _start

_start: # _start is the entry point known to the linker
    xor %ebp, %ebp            # effectively RBP := 0, mark the end of stack frames
    mov (%rsp), %edi          # get argc from the stack (implicitly zero-extended to 64-bit)
    lea 8(%rsp), %rsi         # take the address of argv from the stack
    lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack
    xor %eax, %eax            # per ABI and compatibility with icc
    call main                 # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main

    mov %eax, %edi    # transfer the return of main to the first argument of _exit
    xor %eax, %eax    # per ABI and compatibility with icc
    call _exit        # terminate the program

Siehe auch

Verweise

Externe Links