2

我正在尝试实现自定义加载器和

想为数据和代码定位两个程序头(段)与 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 

请让我知道一些方向。

4

0 回答 0