2013-11-01 10 views
0

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

Например:

$ 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.)

ответ

0

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

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

+0

Мне нужно избавиться от символов _size, потому что когда я загружаю ELF на свою доску, отладчик пытается записать данные _size по адресу 0x00000010, которые загружают ПЗУ на моей плате. – Dominic

+0

Какой отладчик? –

+0

Также я удивлен, что есть данные для записи. Наверное, я начну с более прямой попытки удалить символ. –