如何在.so文件中列出符号

如何列出从.so文件导出的符号? 若是可能的话,我也想知道它们的来源(例如,若是它们是从静态库中提取的)。 c++

我正在使用gcc 4.0.2,若是有区别的话。 git


#1楼

对于共享库libNAME.so,必须使用-D开关才能在Linux中查看符号 正则表达式

nm -D libNAME.so

以及其余人报告的静态库 工具

nm -g libNAME.a

#2楼

若是您的.so文件为elf格式,则能够使用readelf程序从二进制文件中提取符号信息。 该命令将为您提供符号表: spa

readelf -Ws /usr/lib/libexample.so

您只应提取在此.so文件中定义的文件,而不是在该文件所引用的库中的文件。 在这种状况下,第七列应包含一个数字。 您能够使用简单的正则表达式将其提取: code

readelf -Ws /usr/lib/libstdc++.so.6 | grep '^\([[:space:]]\+[^[:space:]]\+\)\{6\}[[:space:]]\+[[:digit:]]\+'

或者,按照Caspin的建议: get

readelf -Ws /usr/lib/libstdc++.so.6 | awk '{print $8}';

#3楼

objdump -TC /usr/lib/libexample.so

#4楼

对于Android .so文件,NDK工具链附带了其余答案中提到的必需工具: readelfobjdumpnmit


#5楼

您能够使用binutils工具链中的nm -g工具。 可是,它们的来源并不老是随时可用。 并且我什至不肯定该信息是否老是能够检索到。 也许objcopy揭示了更多信息。 io

/编辑:该工具的名称固然是nm 。 标志-g用于仅显示导出的符号。 awk

相关文章
相关标签/搜索