GNU链接脚本

    主要以uboot中的i386的链接脚本为例子进行说明。ELF的格式不在这里赘述。

    这里有两个关键的地址:运行地址(VMA)和加载地址(LMA)。前者指的是BIOS在哪个内存地址运行;后者指的是生成的目标文件所烧结到的flash芯片所占用的系统地址是什么。

    链接脚本主要描述了最终ELF中各个段是如何排布的,以及各个段的地址,一个输出段的标准格式
     

   section_name 根据ld手册说是有个确定的名字,其他没啥,自己添加一些新段也是可以的。
   默认的4个段是必须有的
  •    .text 代码
  •    .rodata 常量,例如字符串什么的
  •    .data 初始化的全局变量
  •    .bss  没有初始化的全局变量

   段名字后面紧跟的是 vma ,也就是这个段在程序运行的时候的地址,例如
   

     下面实例中用了两个指令 LOADADDR ,这个指令是用来求 lma 地址的! SIZEOF 求段的大小。例如LOADADDR(.text) 求出 .text 段的 lma,SIZEOF(.text)   求出 .text 段的大小。AT(LOADADDR(.rodata) + SIZEOF(.rodata))  指定 .data段的lma在 .text段lma的结尾处!
     还有一个指令 ADDR(.text) 这个是求vma的,不是求lma。下面实例中未用到,各位知晓即可。

   

 

 

问题:

-------------------------------------------------------------------------------------------------------------------

1.各输入文件的.text在目标文件中.text中的位置是如何确定的?我们是否可以新增一个段,在执行正式代码前,先执行我们自定义段中的代码,如果可以,如何实现?

2. 目标文件中的各个段,何时以及如何从LMA地址迁移到VMA地址,开始正常运行的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值