博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
018链接器脚本
阅读量:5010 次
发布时间:2019-06-12

本文共 1023 字,大约阅读时间需要 3 分钟。

1、链接器脚本的神奇作用

  通过使用不同的链接器脚本,不需要更改源代码,就可以实现不同的功能!

  链接器脚本对程序的生成有着至关重要的作用!

2、链接器脚本--->段

  一个可执行程序通常是由:代码段,数据段,bss段构成的。

  同样,在用于链接这个程序的链接器脚本中,就会反映出这几个段的信息。

  段的信息是由SECTIONS固定的标号指明链接器脚本最重要的信息是段;

  代码段里面包含的是所有文件的代码;

  数据段包含的是所有文件的数据;

  最基本的框架如下:

  

 

3、链接器脚本--->设置起始链接地址

  . = 0x0;

  .(点)表示当前位置,在整个程序中最前面,在代码段之前的位置,当然是程序的起始地址,程序的刚开始地址;

    那么程序是从哪一个地址开始链接呢?后面跟的信息就是程序的链接地址;  

  

  

4、链接器脚本--->对齐设置

  为什么要做4字节对齐?ARM处理器在访问时实际上是采用4字节对齐的方式去访问的,所以说希望在存储一些数据时,尽量的做到4字节对齐,这样能够提高访问的效率;在存放大数据时,希望能够做到4字节对齐,也就是从4的整数倍的这样一个地址开始存放。

  如果起始地址就不能做到4字节对齐,可以使用 . = ALIGN(4); 对地址进行调整;

  

  

5、链接器脚本--->使用变量

  用bss_start记录当前地址,bss_end记录当前地址,但是这两个地址不一样,因为中间隔了一个bss段;

  如果在程序中想计算bss段的长度,就可以用bss_end - bss_start来计算这个长度;

  

  

6、链接器脚本--->设置代码段首文件

  用到不同的链接器脚本,可以让程序运行出完全不同的效果;

  上面那些内容不足以对程序产生那么大影响,虽然有一些修改,但是程序不会体现出完全不同的两种效果,这个神奇之处在代码段的头文件这个位置;

  程序包含多个文件,哪一个文件排在代码段的最前面呢?是有讲究的,二三四的顺序可以不管,但是第一的顺序必须管,第一个文件需要做什么CPU初始化,是首先必须要执行的代码,CPU上电之后,首先必须要执行这个代码,必须要保证,程序在链接时链接到最前面,排第一,怎么做呢?要在代码段中做一个设置。

  

 

 

  

  

  

转载于:https://www.cnblogs.com/mch0dm1n/p/5512901.html

你可能感兴趣的文章
程序员必须知道的几个Git代码托管平台
查看>>
导电塑料入梦来
查看>>
C# 线程手册 第五章 扩展多线程应用程序 - 什么是线程池
查看>>
笔记1126ASP.NET面试题(转)
查看>>
考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)
查看>>
HTTP运行期与页面执行模型
查看>>
tableView优化方案
查看>>
近期思考(2019.07.20)
查看>>
Apache2.4使用require指令进行访问控制
查看>>
冗余关系_并查集
查看>>
做最好的自己(Be Your Personal Best)
查看>>
如何搭建github+hexo博客-转
查看>>
HW2.2
查看>>
将Windows Server 2016 打造成工作站(20161030更新)
查看>>
5大主浏览器css3和html5兼容性大比拼
查看>>
hdu-5894 hannnnah_j’s Biological Test(组合数学)
查看>>
scss常规用法
查看>>
css定位position属性深究
查看>>
android中不同版本兼容包的区别
查看>>
Static 与 new 的问题【待解决】
查看>>