📜  查看so linux的符号——Shell-Bash(1)

📅  最后修改于: 2023-12-03 15:26:39.523000             🧑  作者: Mango

查看so Linux的符号

在Linux系统下,项目代码很可能会以共享库(动态链接库)的方式提供,这些库中包含的函数被其他程序或库所调用。但是,由于库函数的可见性问题,有时候我们会遇到无法调用到某些函数的情况。因此,为了查看库函数以及变量的可见性和链接情况,我们需要通过一些工具来查看库的符号表信息。

nm命令

nm命令是一个用于检查二进制文件中符号信息的工具。我们可以用该命令查看一个共享库所包含的所有符号:

nm -D /path/to/lib.so

其中,-D选项表示只打印动态符号表中的符号信息。nm的输出格式较为简洁,但是对于一些复杂的库,输出太长或者对于不熟练使用的人来说不直观。

objdump命令

objdump命令是一个强大的反汇编工具,它不仅可以用于反汇编目标文件和可执行文件,还可以输出符号表信息。我们可以使用以下命令来查看符号表:

objdump -T /path/to/lib.so

这里使用-T选项来输出符号表,命令会输出一个比较完整的列表,包含了库中所有符号,还包括符号的类型、地址、大小等信息。虽然输出较长,但是十分直观。

readelf命令

readelf命令是一个类似于objdump的Linux二进制分析工具,可以用于查看ELF格式的二进制文件,包括可执行文件、共享库等等。我们可以使用以下命令来查看符号表:

readelf -s /path/to/lib.so

-s选项表示输出所有符号表信息。通过该命令,我们可以查看函数、变量等所有符号,并且提供有关它们的详细信息,例如符号类型、大小、绑定类型等等。

总结

在Linux系统下,查看so库的符号表信息非常有助于我们理解库中所包含的所有函数和变量,从而更好地使用和开发这些库。nm、objdump、readelf命令是常用的查看ELF格式二进制文件的工具,它们各自的输出格式和输出详细程度也不同,可以选择根据具体的需求选择合适的命令去查看符号表。