nm命令
功能:列出.o、.a、.so中的符号信息,包括符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等
https://blog.csdn.net/mayue_web/article/details/115919693
使用:
nm [option(s)] [file(s)]
示例:
# 查看静态库或动态库定义了哪些函数
nm -n --defined-only xxxx.a
nm -g -C --defined-only xxxx.so
nm -D xxxx.so
# 显示hello.a 中的未定义符号,需要和其他对象文件进行链接.
nm -u hello.o
# 在 ./ 目录下找出哪个库文件定义了close_socket函数.
nm -A ./* 2>/dev/null | grep "T close_socket"
objdump命令
功能:以一种可阅读的格式让你更多地了解目标文件、可执行文件可能带有的附加信息,也能完成目标文件或者可执行文件的反汇编。
示例:
# 查看动态库有哪些符号,包括数据段、导出的函数和引用其他库的函数
objdump -tT xxx.so
objdump -x xxx.a
# 查看动态库依赖项
objdump -x xxx.so | grep "NEEDED"
# 查看动态符号表
objdump -T xxx.so
## 假如想知道 xxx.so 中是否导出了符号 yyy ,那么命令为 objdump -T xxx.so | grep "yyy" 。
# 查看动态符号表
objdump -t xxx.so
## -T 和 -t 选项在于 -T 只能查看动态符号,如库导出的函数和引用其他库的函数,而 -t 可以查看所有的符号,包括数据段的符号。
readelf命令
功能:用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(.so)或者静态库(.a) 等包含ELF格式的文件。
示例:
# 查看静态库定义的函数
readelf -c xxx.a
# 查看静态库定义的函数
readelf -A xxx.so
参考资料
https://blog.csdn.net/weixin_34075268/article/details/85517220
https://blog.csdn.net/tao546377318/article/details/51727696
https://blog.csdn.net/beyondioi/article/details/7796414
https://blog.csdn.net/zoomdy/article/details/50563680
https://blog.csdn.net/q2519008/article/details/82349869
https://www.cnblogs.com/SoaringLee/p/10532414.html
https://www.jianshu.com/p/863b279c941e