关于链接脚本中程序入口的一些问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于链接脚本中程序入口的一些问题相关的知识,希望对你有一定的参考价值。

    在编写普通的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 中运行。

以上是关于关于链接脚本中程序入口的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

关于poc脚本的一些问题

关于集群的一些概念

关于微信小程序的一些思考

dTrace 脚本和工具 [关闭]

为啥链接器无法识别我的链接器脚本中定义的入口点

关于ppp拨号gprs上网的一些问题