首页 > 代码库 > 关于链接脚本中程序入口的一些问题
关于链接脚本中程序入口的一些问题
http://www.jb51.net/article/62360.htm
在编写普通的c语言程序时,我们都会先写一个main函数,并认为main函数是所有程序的入口函数,其实main函数只是我们所编写的程序的入口函数,真正可执行文件的入口点并不是main函数,在执行main函数之前还有许多的初始化工作需要做,这些在main函数之前的工作是由标准 C 库完成的,然后再由标准 C 库调用main函数。
真正可执行文件的入口点可以通过查看链接脚本(在使用ld命令时加上-verbose参数)可以看出,真正的入口点是_start函数(或者是一个标号)。由上面的内容可以知道_start函数是 C 库中的内容。所以如果在编译时不链接标准库,会出现 找不到_start 的错误。
======================================================
在学习arm裸机的时候,肯定是用不到标准C库的,而默认程序的入口点就是_start(也可以通过链接脚本来改变入口,但没必要),那么_start标号的地址就会被设置成链接脚本中的代码段的链接地址起始处。我们所写的裸机程序中一定要有 _start 标号或者 _start 函数。
比如.text段的链接起始地址被设置成了 0x2000_0000,那么_start 标号处的地址在链接后将会被设置成 0x2000_0000。然后代码再被拷贝到 iRAM 或者 SDRAM 中运行。
关于链接脚本中程序入口的一些问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。