2

カスタムローダーを実装しようとしていますが、

データとコードの 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 で整列されます。

2 つのプログラム ヘッダーがあります。

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

1 つのプログラム ヘッダーにデータ セクションとコード セクションが混在しているようです。

ただし、プログラムに 2 つのページにアラインされた (0x1000) プログラム ヘッダーを持たせたい

LOAD1        0x0000000050000000 ~ 0x0000000050002340 R E
LOAD2        0x0000000050003000 ~ 0x0000000050006790 RW 

いくつかの方向を教えてください。

4

0 に答える 0