Обратите внимание, что main
не является точкой входа. Точка входа - _start
, предоставленная crt0.o
, которая в конечном итоге вызывает main
. Вы не можете это изменить. Однако вы можете предоставить свой собственный код запуска, который вызывает другую функцию, отличную от main
.
. Обратите внимание, что для самой точки входа можно задать любой символ, который вам нравится, с параметром -e
равным ld
. За подробностями обращайтесь к руководству. Однако обратите внимание, что если вы измените это, код времени выполнения C больше не будет работать правильно. Используйте только с вашим собственным кодом времени выполнения.
Один из вариантов изменить main
на что-то другое - установить main
в качестве псевдонима для другого символа, например, с
.set main, mymain
в какой-то сборочный файл. В качестве альтернативы просто предоставьте фиктивную функцию main
, которая переходит к вашей действительной основной функции:
global main
main: jmp mymain