You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简便列出ELF文件中每个目标文件对应的所有函数

ELF文件按目标文件分组列出所有函数的实现方法

你可以通过nm和awk组合直接实现需求,不需要额外安装工具:

直接可用命令

把下方命令中的<your_elf_file>替换为实际ELF文件路径即可运行:

nm -A <your_elf_file> | awk '/ [Tt] / {split($1,a,":"); if (a[1]!= last) {print "\n"a[1]":"; last=a[1]}; print $3}'

命令说明

  • -A参数让nm输出每条符号前都附带所属的目标文件名
  • 正则/ [Tt] /仅筛选文本段的函数符号:大写T对应全局函数,小写t对应静态函数,如有需要可以调整匹配规则包含弱符号等其他类型函数
  • awk部分负责将结果按目标文件分组整理,输出格式完全符合你的要求

封装为自定义命令

如果要达到你期望的tool [params] elf_file使用方式,可以把上述命令封装为别名:

  1. 编辑~/.bashrc(或你所用shell的配置文件),添加以下内容:
elf-list-func() {
    nm -A "$1" | awk '/ [Tt] / {split($1,a,":"); if (a[1]!= last) {print "\n"a[1]":"; last=a[1]}; print $3}'
}
  1. 执行source ~/.bashrc生效后,就可以直接调用:
elf-list-func your_elf_file

补充说明

如果需要排除未定义的外部引用函数,可以用readelf组合的方案,筛选更精准:

readelf -s <your_elf_file> | awk 'NF>7 && $7!="UND" && $4=="FUNC" {split($NF,a,":"); if (a[1]!= last) {print "\n"a[1]":"; last=a[1]}; print a[2]}'

注意:如果你的ELF文件已经被strip过,丢失了符号表和编译单元信息,上述方法均无法生效,需要用反汇编工具做函数识别。

内容的提问来源于stack exchange,提问作者Ahelion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:45:05