link文件浅浅析

这里介绍一下一般使用的link文件,不同公司的编译器或芯片可能会有所不同,不过大致的流程应该类似。:

纪念下uzi

1. Firstblood :

程序代码最终生成可执行文件经历了几个阶段:预编译、编译(C—>汇编—>binary)、链接。

编译只是把各个.c和.s文件编译成对应的.o文件。然后需要链接器将各个.o文件链接为一个可执行文件。

 

2.Doublekill :

有几个链接文件的关键词 需要知道:

.text:是程序代码段,用于存放函数代码

.data: 全局变量并且初始值不为0

.bss:未初始化的全局变量或者初始化为0的全局变量。

 

3. Triple kill:

编译器将.c、.s文件编译成了对应的.o文件,每个.o文件中可能包含了数量不同的段,.text段、.data段、.bss段、.vectors段、.ram_code段。有的.o文件可能只有其中的一部分,有的.o文件可能包含了所有这些段。链接器将各个.o文件中的代码按照不同的段,链接成一个文件。所有的.text链接到一起,所有的.data链接到一起,所有的.bss段链接到一起,所有的.vectors段链接到一起,所有的.ram_code段链接到一起。

4. Quadra kill

其中:

ENTRY(__start) //告诉链接器程序的启动地址,__start在.s中定义。

SECTION  //

{

}

*是通配符.是一个特殊符号,该符号是一个定位计数器。表示当前地址,可被赋值而改变。

 

PROVIDE:其他文件中可以调用PROVIDE定义的变量。(详细的解释可以百度或google)

 

5,Penta kill

AT:实现LMA和VMA不一致的功能。AT表示在LMA中的存放地址,而在VMA中则按照普通方式存放。

比如AT ( _dstored_ ),在bin文件中不需要这部分地址。所以使用了AT命令。

 

PROVIDE(_code_size_ = (. + 15 ) / 16); //16bytes 对齐

主要实现数据对齐。

ACE

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值