カスタムローダーを実装しようとしていますが、
データとコードの 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
いくつかの方向を教えてください。