如何更改ELF中代码段的alignment方式

在ELF二进制文件中,如何更改可加载段的alignment方式? 在下面的例子中(见右上angular),我想把0x200000减小到0x40960。

LOAD 0x000000 0x000000400000 0x0000000000400000 0x000704 0x000704 RE **0x200000** LOAD 0x000e10 0x000000600e10 0x0000000000600e10 0x000230 0x000238 RW **0x200000** 

任何编译器专家(GCC或叮当)能为我提供一个解决scheme吗?

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

  $ gcc foo.c && readelf -Wl ./a.out |  grep LOAD 
加载0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 RE 0x200000
 LOAD 0x0008c8 0x00000000006008c8 0x00000000006008c8 0x000250 0x000260 RW 0x200000
 $ gcc foo.c -Wl,-z,max-page-size = 4096 && readelf -Wl ./a.out |  grep LOAD 
加载0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 RE 0x1000
 LOAD 0x0008c8 0x00000000004018c8 0x00000000004018c8 0x000250 0x000260 RW 0x1000

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