При встраивании двоичных файлов в изображение эльфа с 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.)
Мне нужно избавиться от символов _size, потому что когда я загружаю ELF на свою доску, отладчик пытается записать данные _size по адресу 0x00000010, которые загружают ПЗУ на моей плате. – Dominic
Какой отладчик? –
Также я удивлен, что есть данные для записи. Наверное, я начну с более прямой попытки удалить символ. –