crt0
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии составления |
Известное время выполнения |
|
Известные компиляторы и наборы инструментов |
|
crt0 (также известный как c0 ) — это набор подпрограмм запуска выполнения, связанных с программой C программы , который выполняет любую работу по инициализации, необходимую перед вызовом основной функции . После завершения основной функции управление возвращается к crt0, который вызывает библиотечную функцию exit(0) для завершения процесса.
Форма и использование
[ редактировать ]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 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
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Инициализация среды выполнения 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 г.