Возможные недостатки переопределения точки входа основной программы

Поэтому я пытался установить собственное имя для main в своей программе на C и нашел этот ответ.

Вы можете указать точку входа в вашу программу, используя флаг -e для ld. Это означает, что вы можете переопределить точку входа, если хотите, но вы можете не захотеть делать это для программы C, которую вы собираетесь нормально запускать на своем компьютере, поскольку start может выполнять все виды специфичных для ОС вещей, которые требуются до запуска вашей программы.

Каковы были бы (возможные) недостатки отказа от вызова _start из crt0.o и написания моего собственного, который просто делает все, что я хочу?


person MD XF    schedule 21.02.2017    source источник
comment
Если _start не вызывается, среда выполнения не инициализируется, поэтому вызов любой функции, предоставляемой средой выполнения, вероятно, не определен.   -  person EOF    schedule 21.02.2017
comment
Вероятно, только при кросс-компиляции (разработке) вы захотите заменить его своим. Но тогда вы захотите переопределить все время выполнения и запустить свое собственное.   -  person Paul Ogilvie    schedule 21.02.2017
comment
Вы не можете использовать другое имя для точки входа для семантики C в соответствующей программе C в размещенной среде. Имя и подпись точки входа определяются языком. В любом случае неясно, какое преимущество вы видите в этом, если бы могли.   -  person John Bollinger    schedule 21.02.2017


Ответы (1)


Точка входа обычно делает что-то вроде

  • Подготовьте аргументы и вызовите main и обработайте его exit
  • Вызовите глобальные конструкторы до main и деструкторы после
  • Заполните глобальные переменные, такие как environ и т.п.
  • Инициализируйте среду выполнения C, например. часовой пояс, stdio потоков и т. д.
  • Возможно, настроить x87 для использования 80-битной плавающей запятой
  • Увеличьте и обнулите .bss, если ваш загрузчик не
  • Все, что необходимо для запуска размещенных программ C на вашей платформе.

Эти вещи тесно связаны с вашей реализацией C, поэтому обычно вы предоставляете свои собственные _start только тогда, когда вы нацелены на автономная среда.

person a3f    schedule 21.02.2017