Mryqu's Notes


  • 首页

  • 搜索
close

Linux/Unix下显示二进制目标文件的符号表

时间: 2013-10-31   |   分类: C++     |   阅读: 53 字 ~1分钟

nm

查看二进制目标文件符号表的标准工具是nm,可以执行下列命令查看二进制目标文件(.o)/静态库(.a)/动态库(.so)的符号表:

nm -g yourObj.o
nm -g yourLib.a
nm -g yourLib.so

C/C++语言在C++编译器编译以后,函数的名字会被编译器修改,改成编译器内部的名字,这个名字会在链接的时候用到。例如std::string::size()经过修饰后是_ZNKSs4sizeEv。通过添加"-C"选项,可以对底层符号表译成用户级名称(demangle),具有更好的可读性。

以test.cpp为例:Linux/Unix下显示二进制目标文件的符号表 将其编译后,通过nm查看符号表,带"-C"选项与否的结果如下:Linux/Unix下显示二进制目标文件的符号表

readelf

如果你的二进制目标文件(.o)/静态库(.a)/动态库(.so)是ELF(Executableand linkingformat)格式,则可以使用readelf命令提取符号表信息。

readelf -Ws usr/lib/yourLib.so

如果仅想输出函数名,可以通过awk命令进行解析:

readelf -Ws test.o  | awk '$4=="FUNC" {print $8}';

以上面的test.o为例:

显示test.o的elf文件头信息:Linux/Unix下显示二进制目标文件的符号表 显示test.o的符号表:Linux/Unix下显示二进制目标文件的符号表

参考

How do I list the symbols in a .so file
nm - Linux man page
readelf - Linux man page

标题:Linux/Unix下显示二进制目标文件的符号表
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#symbol# #elf# #linux# #nm# #readelf#
用python分析FM代码和日志
事务管理器同步机制应用
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
    • nm
    • readelf
    • 参考
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%