Я хочу сделать основание изображения из двоичного файла равным 0x09000000
.
Однако по умолчанию основание изображения составляет 0x08000000
.
Я знаю такую опцию, как
gcc -Wl, - section-start = .text = 0x09000000 ...
Но результат приведенной выше командыкак показано ниже.
(некоторые разделы по-прежнему отображаются по адресу 0x080*****
).
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 09000000 001000 002f92 00 AX 0 0 16
[ 2] .interp PROGBITS 08048154 000154 000013 00 A 0 0 1
[ 3] .note.ABI-tag NOTE 08048168 000168 000020 00 A 0 0 4
[ 4] .hash HASH 08048188 000188 00002c 04 A 5 0 4
[ 5] .dynsym DYNSYM 080481b4 0001b4 000060 10 A 6 1 4
[ 6] .dynstr STRTAB 08048214 000214 000056 00 A 0 0 1
[ 7] .gnu.version VERSYM 0804826a 00026a 00000c 02 A 5 0 2
[ 8] .gnu.version_r VERNEED 08048278 000278 000020 00 A 6 1 4
[ 9] .rel.dyn REL 08048298 000298 000008 08 A 5 0 4
[10] .rel.plt REL 080482a0 0002a0 000018 08 AI 5 23 4
[11] .init PROGBITS 080482b8 0002b8 000023 00 AX 0 0 4
[12] .plt PROGBITS 080482e0 0002e0 000040 04 AX 0 0 16
[13] .plt.got PROGBITS 08048320 000320 000008 00 AX 0 0 8
[14] .fini PROGBITS 09002f94 003f94 000014 00 AX 0 0 4
[15] .rodata PROGBITS 09002fb0 003fb0 000023 00 A 0 0 16
[16] .eh_frame_hdr PROGBITS 09002fd4 003fd4 000024 00 A 0 0 4
[17] .eh_frame PROGBITS 09002ff8 003ff8 0000a0 00 A 0 0 4
[18] .init_array INIT_ARRAY 09004098 004098 000010 00 WA 0 0 4
[19] .fini_array FINI_ARRAY 090040a8 0040a8 000008 00 WA 0 0 4
[20] .jcr PROGBITS 090040b0 0040b0 000004 00 WA 0 0 4
[21] .dynamic DYNAMIC 090040b4 0040b4 0000e8 08 WA 6 0 4
[22] .got PROGBITS 0900419c 00419c 000004 04 WA 0 0 4
[23] .got.plt PROGBITS 090041a0 0041a0 000018 04 WA 0 0 4
[24] .data PROGBITS 090041c0 0041c0 000084 00 WA 0 0 32
[25] .bss NOBITS 09004250 004244 0000d8 00 WA 0 0 16
Вопрос1.
Я хочучтобы переместить основную часть изображения в двоичном формате в 0x09000000
,
... Я хочу переместить целые разделы в original starting address + 0x01000000
Но вышеупомянутая опция может изменить только раздел .text
.
Есть ли какая-нибудь опция компиляции, которую я могу использовать?
Вопрос2.
На самом деле, как вы можете видеть вышеупомянутый результат,
" -Wl, - section-start = .text = 0x09000000"опция не только изменяет .text раздел,
, но также изменяет некоторые относящиеся к данным разделы, такие как .init_array , .got , ...
Почему компилятор делает эту странную вещь?