如何解析EABI格式.out文件并提取符号相关信息?
解析EABI格式.out文件符号信息的实用方法
readelf的平台兼容性
- readelf并非Linux专属,它是GNU Binutils工具集的核心组件之一。Windows环境下可以通过MinGW、WSL安装使用;嵌入式开发场景中,交叉编译工具链(比如ARM的
arm-none-eabi-系列)通常会自带对应架构的readelf(如arm-none-eabi-readelf),专门处理EABI格式的二进制文件。
提取符号信息的正确命令
你提到的--debug-dump=info是用于导出调试信息段的,和符号表不是同一概念。要获取符号的名称、地址、类型及字节大小,直接使用符号表查看选项即可:
基础命令
- 针对本机架构的.out文件:
readelf -s your_file.out
- 针对嵌入式交叉编译生成的EABI文件(比如ARM平台),需使用对应工具链的readelf:
arm-none-eabi-readelf -s your_file.out
输出字段对应关系
命令输出的表格中,关键字段对应你需要的信息:
- Value:符号的内存地址
- Size:符号的字节大小(函数、数据对象会显示实际大小,
NOTYPE类型符号通常为0) - Type:符号类型(例如
FUNC代表函数,OBJECT代表数据对象,NOTYPE代表未定义类型) - Name:符号名称
简化输出(仅保留所需字段)
如果想过滤掉无关内容,只保留目标字段,可以用awk处理:
readelf -s your_file.out | awk '{if(NR>4) print $1, $2, $4, $7, $8}'
(注:不同版本readelf的列索引可能略有差异,执行后可根据实际输出调整列数)
关于--debug-dump=info的补充说明
如果需要获取调试信息关联的细节(比如局部变量、自定义类型定义),才需要用到--debug-dump=info,但该命令输出内容非常冗长,一般不需要用来提取基础符号表信息:
readelf --debug-dump=info your_file.out
内容的提问来源于stack exchange,提问作者user1174394
相关产品推荐
相关产品推荐

