当前位置: 首页 > news >正文

GNU链接器(LD):位置计数器(.)功能及实例解析

0 参考资料

GNU-LD-v2.30-中文手册.pdf
GNU linker.pdf

1 前言

一个完整的编译工具链应该包含以下4个部分:
(1)编译器
(2)汇编器
(3)链接器
(4)lib库
在GNU工具链中,对应的是:
(1)编译器:GCC(GNU Compiler Collection,GNU编译器套件)
(2)汇编器:GAS(GNU Assembler,GNU汇编器)
(3)链接器:LD(GNU Linker,GNU链接器)
(4)lib库:glibc(GNU C Library,GNU C 库)
本文介绍GNU链接器脚本中位置计数器(.)功能及实例解析。

2 GNU链接器(LD):位置计数器(.)功能及实例解析

2.1 位置计数器(.)功能

句点(.)是一个特殊的链接器脚本变量,句点(.)的值总是当前输出位置的计数值,因此也被称作位置计数器。因为句点(.)的值总是输出位置的计数值,因此只能出现在SECTIONS命令内的表达式中。
为句点(.)赋值会导致位置计数器值被修改,通常被用来在输出分区中创建空分区。位置计数器不能在输出分区内向后移动,也不能在输出分区外向后移动,否则可能创建重叠的LMA(加载内存地址)区域。

2.2 位置计数器(.)实例解析

2.2.1 实例(1)

SECTIONS
{output :{file1(.text). = . + 1000;file2(.text). += 1000;file3(.text)} = 0x12345678;
}

说明:
file1中的.text段位于输出分区output的开头,接着创建1个1000字节的空分区。然后分配file2的.text段,接着接着创建1个1000字节的空分区。然后分配file3的.text段。最后的=0x12345678表示在空分区中填充数据0x12345678。

2.2.1 实例(2)

SECTIONS
{. = 0x100.text: {*(.text). = 0x200} . = 0x500.data: {*(.data). += 0x600}
}

说明:
位置计数器指的是当前包含对象开始的字节偏移。通常包含对象是SECTIONS,它的起始地址为0,因此位置计数器可以作为绝对地址。但是如果位置计数器用于分区描述则它表示的是该分区开始的字节偏移量,而不是绝对地址。因此以上操作功能如下:
即使.text输入分区没有足够的空间来填充数据,也会为.text分区分配0x100的起始地址和恰好0x200字节大小(如果需要容纳的数据超出大小,将会产生错误)。.data部分将从0x500地址开始,并且在.data输入分区结束之后和.data输出分区结束之前,还具有额外的0x600字节空间。

http://www.lryc.cn/news/444799.html

相关文章:

  • 学习记录:js算法(四十三):翻转二叉树
  • 关于 SQL 的 JOIN 操作
  • 聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案
  • ES6中迭代器与生成器知识浅析
  • unix中的vfork函数
  • Android 用线程池实现一个简单的任务队列(Kotlin)
  • 遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘
  • 【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)
  • 【AI创作组】工程方向的硕士研究生学习Matlab的路径
  • Mac使用Nginx设置代理,并禁用自带Apache
  • AlmaLinux 安裝JDK8
  • Set 和 Map 的模拟实现
  • 深度学习自编码器 - 预测稀疏分解(PSD)篇
  • 如何检测出来这个ip是共享ip不安全
  • TMStarget学习——T1 Segmentation数据处理及解bug
  • 锁策略, cas 和 synchronized 优化过程
  • 【HTML5】html5开篇基础(2)
  • 大数据新视界 --大数据大厂之 Reactjs 在大数据应用开发中的优势与实践
  • 【论文阅读笔记】TOOD: Task-aligned One-stage Object Detection
  • 类中的特殊内容
  • network request to https://registry.npmjs.org/xxx failed, reason: connect ETIM
  • MQ入门(二):java客户端SpringAMQP
  • 软技能与AI技术的融合
  • 在视频上绘制区域:使用Vue和JavaScript实现交互式画布
  • 31. RabbitMQ顺序消费
  • BERT-BiLSTM-CRF模型实战
  • npm 安装 与 切换 淘宝镜像
  • 在Windows系统上安装的 Arrow C++ 库
  • 格雷母线电缆头安装方法视频-武汉正向科技
  • 统信服务器操作系统【Cron定时任务服务】