链接文件lds的一个例子解析
来源:互联网 发布:中粮我买网淘宝店 编辑:程序博客网 时间:2024/06/14 08:13
开始构造section了。由于使用的语法是固定的,我们只需要了解一个例子,其余的就可举一反三。以第一个section为例:
.text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
_text = .; /* Text and read-only data */
*(.text.head)
} :text = 0x9090
.text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
_text = .; /* Text and read-only data */
*(.text.head)
} :text = 0x9090
.text.head指定了生成的section的名字,后面的冒号是固定语法。AT关键字前面介绍过,指定该section的加载地址(LMA),它的完整表达是
AT(expression)
括号中expression表达式指定LMA的值。在此例中该表达式由
ADDR(.text.head) - LOAD_OFFSET
计算得到。这里
ADDR(section)
计算section的虚拟地址,故.text.head的加载地址(LMA)是它的物理地址。在大括号内部,_text = .;
定义了一个全局变量,它的值为”.”的当前值,记录了整个text segment的起始地址.。在这里,由于_text变量前还没有任何section被创建,故_text有如下等价关系:
_text = ADDR(.text.head) = . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR;
*(.text.head)完成了具体的section创建工作,”*”代表所有输入的.o文件,括号中的.text.head指定了链接器感兴趣的section名。
*(text.head)
表示从所有输入文件中抽取名为.text.head的section并填充到目标文件的.text.head section中。
: text
指定了新生成section所在的segment,这里冒号后的text是segment名,可见内核的第一个section被放到了text segment。
= 0x9090
指定section的填充内容。从输入文件中抽取来的section由于代码对齐的缘故,其二进制的存放可能是不连续的,这里指定对section中的空隙用0x9090进行填充。0x90是汇编指令NOP的机器码,故相当于在不连续代码间填充空操作。至此,内核的第一个section就创建好了,它名为.text.head,由输入文件的.text.head section构成(并非所有文件都有.text.head section,链接器只从具有该section的文件中抽取内容),该section的虚拟地址(VMA)由”.”的值确定,加载地址(LMA)为其物理地址,section中不连续区域产生的间隙由0x9090填充,最后该section被放入了内核的text segment中。
通过objdump内核,我们可以看到关于该section的最终内容:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text.head 00000375 c1000000 01000000 00001000 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
- 链接文件lds的一个例子解析
- uboot中的.lds链接文件解析
- 链接文件*.lds
- 链接文件lds
- 链接脚本文件 lds
- 写一个简单的BootLoader(四)——链接文件boot.lds分析笔记
- 链接脚本.lds文件分析
- u-boot中.lds链接脚本文件的分析
- u-boot中.lds链接脚本文件的分析
- u-boot中.lds链接脚本文件的分析
- 内核的链接脚本文件vmlinux.lds.S
- u-boot中.lds链接脚本文件的分析
- Eclipse下.lds文件解析
- ARM 链接配置.lds文件学习
- ARM 链接配置.lds文件学习
- u-boot之.lds链接文件
- u-boot.lds链接文件详解
- u-boot.lds链接文件详解
- HED神经网
- First Missing Positive (第十一周 数组)
- Mysql 远程链接 Communications link failure
- Quake4的gui
- 【转】反应器(Reactor)模式
- 链接文件lds的一个例子解析
- WebSocket 原理介绍及服务器搭建
- zookeeper添加acl认证
- Oracle定时任务
- C++ 多态详解
- Android——自定义捕获Application全局异常
- LAN7500 Mac OS X Device Driver
- hibernate5+sql server2012 分页异常
- 上传 Android library 到 Jcenter