【发布时间】:2012-06-19 23:25:31
【问题描述】:
所以我已经搜索了几个星期的互联网,但找不到我的问题的答案。
我可以看到 gcc 添加的开始符号设置了最初的两个参数(int argc,char *argv[]),我相信第三个环境参数,但我对此有几个问题。如果 main() 函数被定义为没有参数,为什么还要添加所有这些?如果它只调用 _main 而没有任何参数,它不会节省空间(和技术上的处理时间)吗? 其次 push $0x0 是做什么的?我已经完成了测试,如果您尝试像默认开始符号那样迭代命令行参数,那么您需要在开头 push $0x0,否则如果我执行以下操作会产生未对齐的堆栈错误:
push $0x00
call _main
mov %eax, %edi
call _exit
在我的调查中,我还发现当您链接到 crt1.10.6.o 时,链接器会添加起始符号
任何解释或文档将不胜感激
【问题讨论】: