欢迎光临散文网 会员登陆 & 注册

13.3代码重定位_链接脚本的解析

2020-08-21 14:39 作者:韦东山  | 我要投稿

链接脚本的语法 

解释: 

secname  :段名

start  :起始地址:运行时的地址(runtime addr);重定位地址(relocate addr)

AT ( ldadr ) :可有可无(load addr:加载地址) 不写时LoadAddr = runtime addr

{ contents } 的内容: 

start.o //内容为start.o文件

*(.text)所有的代码段文件

start.o *(.text)文件


elf文件格式

1 链接得到elf文件,含有地址信息(load addr)

2 使用加载器

    2.1 对于裸板是JTAG调试工具

    2.2 对于APP,加载器也是APP 把elf文件解析读入内存的加载地址

3运行程序

4如果loadaddr != runtimeaddr程序本身要重定位

核心程序运行时应该位于 runtimeaddr(reloate addr)或者链接地址 


bin文件

1 elf生成bin文件

2 硬件机制启动

3 如果bin文件所在位置 不等于runtimeaddr ,程序本身实现重定位


bin文件/elf文件都不保存bss段 这些都是初始值为0 或者没有初始化的全局变量

程序运行时把bss段对应的空间清零

做个实验,把全局变量g_A以16进制打印出来 

上述代码,没有清理bss段  g_A等于莫名奇妙的值 并不等于0 所以需要清理bss段


修改lds链接文件 

修改start.s,清除bss段 

现在的代码全局变量就是为0,通过几行代码,就可以少几十个甚至上千个全局变量的存储空间。 

13.3代码重定位_链接脚本的解析的评论 (共 条)

分享到微博请遵守国家法律