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 符号的赋值

我们可以使用任何C语言的赋值运算符为符号赋值,如下:

symbol = expression;
symbol += expression;
symbol -= expression;
symbol *= expression;
symbol /= expression;
symbol <<= expression;
symbol >>= expression;
symbol &= expression;
symbol |= expression;

说明:
(1)symbol = expression可以为symbol赋值symbol,而其它操作必须在symbol已经定义的情况下进行
(2)expression后面必须添加分号;
(3)句点(.)这个符号指示当前位置计数器

2.2 实例解析

下面这个例子展示了在链接脚本三个不同位置赋值操作的区别:

_point = 0;
SECTIONS
{
	.text :
	{
		*(.text)
		_etext = .;
	}
	_bdata = (. + 3) & ~ 3;
	.data : { *(.data) }
}

说明:
(1)_point被定义为0
(2)_etext被定义为.text输入分区之后的首地址
(3)_bdata被定义为.text输出分区之后的首地址向上4字节对齐后的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NW嵌入式开发

感谢您的支持,让我们一起进步!

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

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

打赏作者

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

抵扣说明:

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

余额充值