note - gnu/gcc tool binutils nm - binary breakdown analysis

gnu/gcc tool binutils nm - binary breakdown analysis

个人笔记,不详细描述。
目标:

  1. 获取 bin 文件实际链接的flash, sram breakdown,可通过 readelf 查看,但该命令输出没有 symbol 所属源文件信息,不利于统计各个模块所占资源;
  2. 获取各个变量和函数所属源文件的信息,可通过 nm 查看,并结合上述 readelf 可统计一个源文件中共计多少变量和函数被 link 到 elf。
    注:.c 编译后输出 .o 为全文件编译结果,非 link 到 elf 输出 bin的大小,因为部分函数或变量并未调用,可以通过 size.exe 查看 .o 中各个段和symbol,但是无法查看实际 link 的大小。

相关定义介绍

nm, readelf, objdump, addr2line

nm, readelf, objdump, addr2line 来自 GNU toolchain - binutils,通过分析 elf 文件可获取 bin 中的各个segment,section, symbol 的相关属性。

elf(executable and link format)

通常在 linux terminal 直接运行 “gcc test.c” 生成的 “a.out” 文件就是 elf 格式的,可直接执行。
elf文件里面包含了符号表、大小,汇编信息等。

机器最终只认 bin,elf 格式是在有操作系统时,操作系统会根据 elf 解析出代码、数据等,最终仍是以 bin 运行。由于 elf 信息比较全,所以可以用来单步跟踪的方式运行。

binary

bin 文件是二进制可执行文件,在 elf 基础上删除了符号表等调试信息,提取了代码段、数据段等制作的内存镜像文件;通常保存在嵌入式系统的 rom/flash 内,可被嵌入式 mcu 执行;

注:如果直接将 elf 文件烧录到嵌入式 flash 中,当执行到调试信息指令会导致运行失败宕机。

在嵌入式平台中,上电开始运行,没有 OS 系统,如果将 elf 格式的文件烧写进去,包含一些 elf 格式的东西,ARM 运行碰到这些指令,就会导致失败。
可通过 objcopy 将 elf 转换为 bin。

objcopy -O binary -S test_adr.elf test_adr.bin

使用binutils

readelf

-s --syms              Display the symbol table
readelf.exe -sS B91_rcu.elf

通过上述命令可获取 elf 文件中 segment,section,和 symbol 的大小和相关信息。

nm

 -l, --line-numbers     Use debugging information to find a filename and
                           line number for each symbol
 -S, --print-size       Print size of defined symbols

nm.exe -lS xxx.elf

通过上述命令可获取 elf 文件中 symbol 的大小和来源信息(源文件和行号),用于统计一个源文件中共计多少变量和函数。

可参考以下工具:elf-size-analysis

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值