The symbol _start
is the entry point of your program. That is, the address of that symbol is the address jumped to on program start. Normally, the function with the name _start
is supplied by a file called crt0.o
which contains the startup code for the C runtime environment. It sets up some stuff, populates the argument array argv
, counts how many arguments are there, and then calls main
. After main
returns, exit
is called.
If a program does not want to use the C runtime environment, it needs to supply its own code for _start
. For instance, the reference implementation of the Go programming language does so because they need a non-standard threading model which requires some magic with the stack. It's also useful to supply your own _start
when you want to write really tiny programs or programs that do unconventional things.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…