linux使某一列右对齐,linux – 如何更改ELF中代码段的对齐方式

博客围绕ELF二进制文件中可加载段对齐方式的更改展开,提出将0x200000减少到0x40960的需求,并给出用ld -z max-page-size = 4096更改最大页面大小的解决方法,还提及链接器按架构最大页面大小对齐段的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ELF二进制文件中,如何更改可加载段的对齐方式?

在下面的例子中(见右下角),我想将0x200000减少到0x40960.

LOAD 0x000000 0x000000400000 0x0000000000400000 0x000704 0x000704 R E **0x200000**

LOAD 0x000e10 0x000000600e10 0x0000000000600e10 0x000230 0x000238 RW **0x200000**

任何编译专家(GCC或clang)都可以为我提供解决方案吗?

解决方法:

我不知道你是否真的想这样做但你可以用ld -z max-page-size = 4096更改最大页面大小:

$gcc foo.c && readelf -Wl ./a.out | grep LOAD

LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 R E 0x200000

LOAD 0x0008c8 0x00000000006008c8 0x00000000006008c8 0x000250 0x000260 RW 0x200000

$gcc foo.c -Wl,-z,max-page-size=4096 && readelf -Wl ./a.out | grep LOAD

LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 R E 0x1000

LOAD 0x0008c8 0x00000000004018c8 0x00000000004018c8 0x000250 0x000260 RW 0x1000

显然,原因是链接器尝试将段与您架构上可用的最大页面大小对齐(在CPU上?). x86上的标准默认页面大小为4KiB,但存在更多页面(例如2MiB页面).

标签:linux,clang,gcc,elf

来源: https://codeday.me/bug/20191006/1862810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值