关于arm-linux-gcc编译出bin文件直接copy到运行载体上不能运行情况。

过程:

1、利用arm-linux-gcc生成*.elf文件

2、arm-linux-objcopy -O binary <src.elf> <target.bin>

3.利用dd或者winhex将target.bin拷贝到指定地址。

4.结果无法运行。

查找原因:

发现生成bin文件在跳转到reset指令前面还有字符串信息,能看到GNU字样。这样直接拷贝到指定地址肯定不能正常运行,查找原因,发现*.elf文件头有.note.gnu.build-id文件信息,生成的bin文件保留了这个信息。所以真实的跳转地址还需要加这个头的数据长度,才真实跳转到bin文件运行部分。

我解决方式:

1、编译的时候加上 -Wl,--build-id=none

2、生成bin文件发现没有了note.gnu.build-id这部分信息

3、我的bin文件copy后再运行载体上直接运行,不需要加偏移地址。

工具使用:

readelf -S <target.elf>查看section

readelf -n <target.elf>查看note.gnu.build-id信息

readelf -l <target.elf>查看 segment

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值