.o文件的链接过程和代码重定位这两个概念的理解

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《U-Boot重定位代码分析 》, 一起来围观吧 https://blog.csdn.net/huangxb_csu/article/details/4981677?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《重定位和链接》, 一起来围观吧 https://blog.csdn.net/u012741741/article/details/51870752?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

链接脚本其实是个规则文件,他是程序员用来指挥链接器工作的。链接器会参考链接脚本,并且使用其中规定的规则来处理.o文件中那些段,将其链接成一个可执行程序。

链接脚本的关键内容有2部分:段名 + 地址(作为链接地址的内存地址)

链接脚本的理解:

SECTIONS {…} 这个是整个链接脚本

. 点号在链接脚本中代表当前位置。

= 等号代表赋值

程序段的概念:代码段、数据段、bss段(ZI段)、自定义段

段就是程序的一部分,我们把整个程序的所有东西分成了一个一个的段,给每个段起个名字,然后在链接时就可以用这个名字来指示这些段。也就是说给段命名就是为了在链接脚本中用段名来让段站在核实的位置。

段名分为2种:一种是编译器链接器内部定好的,先天性的名字;

一种是程序员自己指定的、自定义的段名。

先天性段名:

代码段:(.text),又叫文本段,代码段其实就是函数编译后生成的东西

数据段:(.data),数据段就是C语言中有显式初始化为非0的全局变量

bss段:(.bss),又叫ZI(zero initial)段,就是零初始化段,对应C语言中初始化为0的全局变量。

后天性段名:

段名由程序员自己定义,段的属性和特征也由程序员自己定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学无止境2022

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

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

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

打赏作者

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

抵扣说明:

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

余额充值