GNU链接器(LD):内置函数(ALIGN、NEXT、LOADADDR等)介绍

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链接器(LD)链接器脚本的内置函数。

2 GNU链接器(LD):内置函数(NEXT、LOADADDR等)介绍

2.1 ABSOLUTE(exp)

返回表达式exp的绝对值。

2.2 ADDR(section)

返回 section 的 VMA (虚拟内存地址)。

2.3 ALIGN(align)、ALIGN(exp,align)

返回给位置计数器(.)或者任意表达式exp对齐到下个以 align 对齐的边界值。

2.4 ALIGNOF(section)

如果section已对齐,则返回section的对齐方式(以字节为单位)。

2.5 BLOCK(exp)

ALIGN 的同义词,兼容旧版链接器脚本。

2.6 DATA_SEGMENT_END(exp)

定义了数据段的结尾,用于计算 DATA_SEGMENT_ALIGN。

2.7 DATA_SEGMENT_RELRO_END(offset, exp)

当使用‘-z relro’时,定义 PT_GNU_RELRO 段的结尾。

2.8 DEFINED(symbol)

如果 symbol 在链接器全局符号表中,并且在使用 DEFINED 的脚本位置之前定义了,就会返回 1,否则返回 0。

2.9 LENGTH(memory)

返回名为 memory 的存储区域长度。

2.10 LOADADDR(section)

返回 section 的 LMA(加载内存地址)。

2.11 LOG2CEIL(exp)

返回 log2(exp)向大取整的结果。LOG2CEL(0)返回 0。

2.12 MAX(exp1, exp2)

返回两者中较大的那个。

2.13 MIN(exp1, exp2)

返回两者中较小的那个。

2.14 NEXT(exp)

返回下一个是 exp 倍数的未分配的地址。

2.15 ORIGIN(memory)

返回 memory 存储区域的起始地址。

2.16 SEGMENT_START(segment, default)

返回 segment 段的基地址。

2.17 SIZEOF(section)

如果已分配了该分区,则返回 section 字节大小。在计算未分配的分区时,链接器将报错。

2.18 SIZEOF_HEADERS

返回输出文件头的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NW嵌入式开发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值