DATA_SEGMENT_RELRO_END
此命令为 ld 使用了 -z relro 命令的情况下定义了 PT_GNU_RELRO 段的结尾。若没有使
用 -z relro, DATA_SEGMENT_RELRO_END 不做任何事情,否则 DATA_SEGMENT_RELRO_END
将被填充,因此 expr + offset 被对齐到某个目标最常见的页边界。如果出现在链接脚
本内,其通常位于 DATA_SEGMENT_ALIGN 和 DATA_SEGMENT_END 之间。第二个参数加上任
何 PT_GNU_RELRO 段需要的填充都会导致段对齐。
一个简单例子
e.g. 三个源文件 DemoA.c,DemoB.c 和 DemoC.c,其中 DemoA.c 引用 DemoA.c 和
DemoB.c 里面的函数,使用 GCC 生成独立的目标文件 DemoA.o,DemoB.o 和 DemoC.o。
ld 使用链接脚本 Demo.lds, 并且在 Demo.lds 里面通过使用 DATA_SEGMENT_END 关键字
对数据段进行处理:
DemoA.c
DemoB.c
DemoC.c
Demo.lds
使用如下命令进行编译和链接:
附录
BiscuitOS Home
BiscuitOS Driver
BiscuitOS Kernel Build
Linux Kernel
Bootlin: Elixir Cross Referencer
赞赏一下吧 🙂