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 вызов _выход # завершить программу
Смотрите также
Рекомендации
- ^ а б "Инициализация среды выполнения C, crt0.o". embecosm.com. 2010. Получено 2013-12-30.
- ^ «Инициализация программы: создание библиотеки C». osdev.org. 2014-02-25. Получено 2014-04-21.
- ^ «Вызов глобальных конструкторов». osdev.org. 2014-04-08. Получено 2014-04-21.
- ^ "Компиляция программы для профилирования: GNU gprof". sourceware.org. Получено 2013-12-30.