Как переместить символы размера BFD?

При встраивании двоичных файлов в образ эльфа с помощью gcc, есть ли способ изменить адрес автоматически сгенерированного _binary_*_size символы? в отличие от _binary_*_start а также _binary_*_end символы, _binary_*_size символы, кажется, не следуют за базовым адресом кода. Они находятся в абсолютном разделе bfd (*ABS*).

Например:

$ arm-linux-gnueabihf-gcc -nostdlib -Wl,-Ttext=0x80000000,--format=binary,foo.bin,--format=default boot.S
$ arm-linux-gnueabihf-nm a.out | sort
00000010 A _binary_foo_bin_size
80000000 T _start
80008004 D _binary_foo_bin_start
80008014 D _binary_foo_bin_end
80008014 A __bss_start
80008014 A __bss_start__
80008014 A __bss_end__
80008014 A _bss_end__
80008014 A _edata
80008014 A _end
80008014 A __end__

мне бы хотелось _binary_foo_bin_size Быть в 0x80008*** вместо 0x00000***, (Желательно без написания собственного скрипта компоновщика или использования дополнительных команд objcopy.)

1 ответ

Я думаю, что символ _size записывает размер раздела. Таким образом, смещение этого символа будет неправильным - он больше не будет записывать размер.

Мне любопытно, почему ты должен это сделать. Вы не сказали. Может быть, есть другой способ достичь своей цели.

Другие вопросы по тегам