【问题标题】:How to relocate the bfd size symbols?如何重新定位 bfd 大小符号?
【发布时间】:2013-11-13 04:25:23
【问题描述】:

当使用 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 命令。)

【问题讨论】:

    标签: ld binutils bfd


    【解决方案1】:

    我认为 _size 符号记录了该部分的大小。所以,偏移这个符号是错误的——它不再记录大小。

    我很好奇您为什么需要这样做。你没说。也许还有其他方法可以实现您的目标。

    【讨论】:

    • 我需要去掉 _size 符号,因为当我在我的板上加载 ELF 时,调试器正在尝试将 _size 数据写入我板上引导 ROM 的地址 0x00000010。跨度>
    • 我也很惊讶有任何数据要写入。我想我会从更直接地尝试删除符号开始。
    • 那是 ARM DS-5 5.16(带有 DSTREAM)。
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2012-12-24
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多