使用 gcc 在 elf 图像中嵌入二进制文件时,有没有办法更改自动生成的_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 命令。)