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命令。)
我需要摆脱_size符号,因为当我在我的电路板上加载ELF时,调试器正试图在地址0x00000010上写入_size数据,这是引导ROM在我的主板上。 – Dominic
它是什么调试器? –
另外我很惊讶有任何数据要写。我想我会开始更直接地尝试删除符号。 –