今天在编译vxWorks的bootrom时,发现一个这样的问题:
我们使用-e命令来指定某些程序的入口地址,使用-Ttext指定程序的text段加载到内存后的位置。
有一种情形如下:
src文件A.c中:
包含函数a(),b(),c()的定义,存放于A.c中的顺序为a(),b(),c();
此时,若我们需要指定b()函数为此编译链接过程生成的程序的入口点,而在makefile中使用-e命令,是无法实现的,根据我反汇编并使用在线调试器的单步运行结果来看,程序会将函数a()作为程序入口点。
此问题非常隐蔽,特别在某些时候,我们为了减少链接文件个数,直接在A.c文件中使用include"B.c",于是,当程序被加载进内存,你会惊奇的发现B.c中第一个函数居然成了程序的入口点。
阅读(567) | 评论(0) | 转发(0) |