链接脚本简介
来源:互联网 发布:mac怎么在pdf上写字 编辑:程序博客网 时间:2024/06/06 13:22
以下内容源于朱有鹏《物联网大讲堂》课程,如有侵权,请告知删除。
1、程序段的概念:代码段(.text)、数据段(.data)、bss段(ZI段)、自定义段
(1)段是指程序的某部分。
- 把整个程序分成许多段,给每个段起一个名字,在链接时用这个名字来指示这些段。
- 给段命名,就是为了在链接脚本中,让段站在合适的位置。
(2)段名分为2种:一种是编译器链接器内部定好的,先天性的名字;一种是程序员自己指定的、自定义的段名。
- 先天性段名:
代码段:(.text) ,又叫文本段,代码段其实就是函数编译后生成的东西;
数据段:(.data),数据段就是C语言中有显式初始化为非0的全局变量;
bss 段:(.bss) ,又叫ZI(zero initial)段,即零初始化段,对应C语言中初始化为0(或者没有显式初始化)的全局变量。
- 后天性段名:
(3)C语言中全局变量如果未显式初始化,值是0。
- 本质就是C语言把这类全局变量放在了bss段,从而保证了为0;
(4)如何保证显式初始化为非0的全局变量的值在main之前就被赋值了?
- 这类变量放在.data段中,而.data段会在main执行之前被处理(初始化)。
2、链接脚本的作用
(1)链接脚本是一个规则文件,用来指挥链接器工作。
- 链接器会参考链接脚本,使用其中的规则来处理.o文件中那些段(一般情况下,每个.o文件会包含若干个段,而不是只有某个段),将其链接成一个可执行程序。
(2)链接脚本的关键内容有2部分:段名 + 地址(作为链接地址的内存地址)
(3)链接脚本的理解:
SECTIONS {} 这个是整个链接脚本
. 点号在链接脚本中代表当前位置
= 等号代表赋值
(4)举例如下(代码的内容是链接到以0xd0024000开始的空间。)
SECTIONS{. = 0xd0024000;//地址.text : {//段名start.o* (.text)} .data : {* (.data)}bss_start = .; .bss : {* (.bss)}bss_end = .;}
0 0
- 链接脚本简介
- Linux下的lds链接脚本简介
- 编译链接-----Linux下的lds链接脚本简介
- Linux下的lds链接脚本简介(一)
- Linux下的lds链接脚本简介(二)
- Linux下的lds链接脚本简介(三)
- Linux下的lds链接脚本简介(四)
- Linux下的lds链接脚本简介(一)
- Linux下的lds链接脚本简介(二)
- Linux下的lds链接脚本简介(三)
- Linux下的lds链接脚本简介(四)
- Linux下的lds链接脚本简介(一)
- Linux下的lds链接脚本简介(一)
- Linux下的lds链接脚本简介(二)
- Linux下的lds链接脚本简介(三)
- Linux下的lds链接脚本简介(四)
- Linux下的lds链接脚本简介(一)
- Linux下的lds链接脚本简介(二)
- bzoj 1937: [Shoi2004]Mst 最小生成树 (KM算法)
- 数据结构-归并排序
- rpc netty
- opencv笔记(2):图像形态学
- Java内存分配分析
- 链接脚本简介
- linux压缩与解压命令
- java 使用 comet4j 主动向客户端推送信息 简单例子
- hdu 2853 Assignment (KM算法)
- PHP文件写入函数file_put_contents并发追加写入丢失内容问题解决方法
- Java编程思想-03操作符
- HDU 2602 Bone Collector
- 《机器学习实战》学习笔记---Logister回归
- java.util.Stack里Stack默认容量有多大?