我正在尝试实现自定义加载器和
想为数据和代码定位两个程序头(段)与 0x1000 对齐。
我修复了默认链接器脚本的某些部分并得到了奇怪的结果。
**Default linker script.**
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) &
(CONSTANT (MAXPAGESIZE) - 1));
. = DATA_SEGMENT_ALIGN (CONSTANT(MAXPAGESIZE),CONSTANT (COMMONPAGESIZE));
**Modified linker script**
. = ALIGN (0x1000);
. = DATA_SEGMENT_ALIGN(0x1000, 0x1000);
当我使用默认链接器脚本编译二进制文件时,它是 0x200000 对齐的
并有两个程序头。
LOAD 0x0000000000000000 0x0000000050000000 0x0000000050000000
0x0000000000001058 0x0000000000001058 R E 200000
LOAD 0x0000000000001fe8 0x0000000050201fe8 0x0000000050201fe8
0x0000000000000028 0x00000000000000c0 RW 200000
但我通过修改后的链接器脚本得到以下结果。
LOAD 0x0000000000000000 0x0000000050000000 0x0000000050000000
0x0000000000002010 0x00000000000020a8 RWE 200000
似乎数据部分和代码部分混合在一个程序头中。
但是,我想让我的程序有两个页面对齐(0x1000)程序头
LOAD1 0x0000000050000000 ~ 0x0000000050002340 R E
LOAD2 0x0000000050003000 ~ 0x0000000050006790 RW
请让我知道一些方向。