什么时候需要做这种事情?
当您需要自己的程序启动代码时。
main
不是C程序_start
的第一个条目,而是幕后的第一个条目。
Linux中的示例:
_start: # _start is the entry point known to the linker
xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames
mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit)
lea 8(%rsp), %rsi # take the address of argv from the stack
lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack
xor %eax, %eax # per ABI and compatibility with icc
call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main
mov %eax, %edi # transfer the return of main to the first argument of _exit
xor %eax, %eax # per ABI and compatibility with icc
call _exit # terminate the program
在现实世界中是否有任何有用的场景?
如果您的意思是,请实施我们自己的_start
:
是的,在我使用过的大多数商业嵌入式软件中,我们都需要_start
针对特定的内存和性能要求实施自己的软件。
如果您的意思是,请删除该main
函数并将其更改为其他内容:
不,我认为这样做没有任何好处。