Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии компиляции |
Заметное время выполнения |
Известные компиляторы и инструментальные средства |
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.
.текст.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 из стека xor % eax , % eax # на ABI и совместимость с вызовом icc main #% edi,% rsi,% rdx - это три аргумента (первые два из которых соответствуют стандарту C) для основного mov % eax , % edi # переносим возврат main в первый аргумент _exit xor % eax , % eax # на ABI и совместимость с icc call _exit # завершаем программу
См. Также [ править ]
- Точка входа
- Система выполнения
Ссылки [ править ]
- ^ a b "Инициализация среды выполнения C, crt0.o" . embecosm.com . 2010 . Проверено 30 декабря 2013 . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Инициализация программы: Создание библиотеки C» . osdev.org . 2014-02-25 . Проверено 21 апреля 2014 . CS1 maint: discouraged parameter (link)
- ^ «Вызов глобальных конструкторов» . osdev.org . 2014-04-08 . Проверено 21 апреля 2014 . CS1 maint: discouraged parameter (link)
- ^ "Компиляция программы для профилирования: GNU gprof" . sourceware.org . Проверено 30 декабря 2013 . CS1 maint: discouraged parameter (link)
Внешние ссылки [ править ]
- crt0.o против crt1.o
- Запуск программы Linux x86
- Привет из мира без libc! (Часть 1) , 16 марта 2010 г.
- glibc x86_64 start.S