Crt0 - Crt0

crt0 (также известный как c0) представляет собой набор процедур запуска выполнения связаны в C программа, которая выполняет любую работу по инициализации, необходимую перед вызовом программы основная функция.

Форма и использование

Crt0 обычно имеет форму объектный файл называется crt0.o, часто пишется на язык ассемблера, который автоматически включается компоновщик в каждый запускаемый файл он строит.[1]

crt0 содержит самые основные части библиотека времени исполнения. Таким образом, точная работа, которую он выполняет, зависит от компилятора программы, операционной системы и Стандартная библиотека C выполнение.[1] Помимо работы по инициализации, требуемой средой и набор инструментов, crt0 может выполнять дополнительные операции, определенные программистом, такие как выполнение C ++ Глобальный конструкторы и функции C, несущие GCC с ((конструктор)) атрибут.[2][3]

«crt» означает «среда выполнения C», а ноль означает «самое начало». Однако, когда программы компилируются с использованием GCC, он также используется для языков, отличных от C. Альтернативные версии crt0 доступны для особых сценариев использования; например, чтобы включить профилирование с гпроф, программы должны быть скомпилированы с gcrt0 вместо.[4]

Пример crt0.s

Этот пример предназначен для Linux x86-64 с Синтаксис AT&T, без реальной среды выполнения C.

.текст.globl _Начните_Начните: # _start - точка входа, известная компоновщику    xor % ebp, % ebp            # эффективно RBP: = 0, отметить конец кадров стека    mov (% rsp), % edi          # получить argc из стека (неявно с нулевым расширением до 64-бит)    леа 8(% rsp), % rsi         # берем адрес argv из стека    леа 16(% rsp,% rdi,8), % rdx # берем адрес envp из стека    xor % eax, % eax            # на ABI и совместимость с icc    вызов главный                 #% edi,% rsi,% rdx - это три аргумента (из которых первые два являются стандартом C) основного    mov % eax, % edi    # передать возврат main в первый аргумент _exit    xor % eax, % eax    # на ABI и совместимость с icc    вызов _выход        # завершить программу

Смотрите также

Рекомендации

  1. ^ а б "Инициализация среды выполнения C, crt0.o". embecosm.com. 2010. Получено 2013-12-30.
  2. ^ «Инициализация программы: создание библиотеки C». osdev.org. 2014-02-25. Получено 2014-04-21.
  3. ^ «Вызов глобальных конструкторов». osdev.org. 2014-04-08. Получено 2014-04-21.
  4. ^ "Компиляция программы для профилирования: GNU gprof". sourceware.org. Получено 2013-12-30.

внешняя ссылка