Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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  # завершаем программу

См. Также [ править ]

  • Точка входа
  • Система выполнения

Ссылки [ править ]

  1. ^ a b "Инициализация среды выполнения C, crt0.o" . embecosm.com . 2010 . Проверено 30 декабря 2013 . CS1 maint: обескураженный параметр ( ссылка )
  2. ^ «Инициализация программы: Создание библиотеки C» . osdev.org . 2014-02-25 . Проверено 21 апреля 2014 . CS1 maint: discouraged parameter (link)
  3. ^ «Вызов глобальных конструкторов» . osdev.org . 2014-04-08 . Проверено 21 апреля 2014 . CS1 maint: discouraged parameter (link)
  4. ^ "Компиляция программы для профилирования: 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