2013-11-01 31 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时,调试器正试图在地址0x00000010上写入_size数据,这是引导ROM在我的主板上。 – Dominic

+0

它是什么调试器? –

+0

另外我很惊讶有任何数据要写。我想我会开始更直接地尝试删除符号。 –