crt0
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии составления |
Известное время выполнения |
|
Известные компиляторы и наборы инструментов |
|
crt0 (также известный как c0 ) — это набор процедур запуска выполнения, связанных с программой C программы , который выполняет любую работу по инициализации, необходимую перед вызовом основной функции .
Форма и использование [ править ]
Crt0 обычно принимает форму объектного файла с именем crt0.o , часто написанный на языке ассемблера , который автоматически включается компоновщиком в каждый создаваемый им исполняемый файл . [1]
crt0 содержит самые основные части библиотеки времени выполнения . Таким образом, точная работа, которую он выполняет, зависит от компилятора программы, операционной системы и стандартной библиотеки C. реализации [1] Помимо работ по инициализации, требуемых средой и набором инструментов , crt0 может выполнять дополнительные операции, определенные программистом, такие как выполнение C++ глобальных конструкторов и функций C, несущих GCC . ((конструктор)) Атрибут [2] [3]
«crt» означает «время выполнения C», а ноль означает «самое начало». Однако, когда программы компилируются с использованием GCC, он также используется для языков, отличных от C. Альтернативные версии crt0 доступны для особых сценариев использования; например, чтобы включить профилирование с помощью gprof , программы должны быть скомпилированы с помощью вместо этого gcrt0 . [4]
Пример crt0.s [ править ]
Этот пример предназначен для Linux x86-64 с синтаксисом AT&T , без фактической среды выполнения C.
.text
.globl _start
_start: # _start — это точка входа, известная компоновщику
xor %ebp , %ebp # эффективно RBP := 0, отмечает конец кадров стека
mov ( %rsp ), %edi # получает argc из стека (неявно расширенное до 64-битного уровня)
lea 8 ( %rsp ), %rsi # возьмем адрес argv из стека
lea 16 ( %rsp , %rdi , 8 ), %rdx # возьмем адрес envp из стека stack
xor %eax , %eax # для ABI и совместимости с
вызовом icc main # %edi, %rsi, %rdx — это три аргумента (из которых первые два являются стандартными C) для main
mov %eax , %edi # передача возврата main к первому аргументу _exit
xor %eax , %eax # для ABI и совместимости с
вызовом icc _exit # завершить программу
См. также [ править ]
Ссылки [ править ]
- ^ Перейти обратно: а б «Инициализация среды выполнения C, crt0.o» . embecosm.com . 2010 . Проверено 30 декабря 2013 г.
- ^ «Инициализация программы: Создание библиотеки C» . osdev.org . 25 февраля 2014 г. Проверено 21 апреля 2014 г.
- ^ «Вызов глобальных конструкторов» . osdev.org . 08.04.2014 . Проверено 21 апреля 2014 г.
- ^ «Компиляция программы для профилирования: GNU gprof» . исходное программное обеспечение.org . Проверено 30 декабря 2013 г.