linux查看so库函数命令

linux查看so库函数命令

在Linux中,可以使用以下命令来查看共享对象(so)库的函数:

  1. nm命令:通过使用nm命令,可以列出so库中定义的所有符号,包括函数、变量等。使用以下命令:
    nm -D “
    例如:

    nm -D libtest.so

    该命令将列出libtest.so库中的所有符号,其中包括函数名称。

    nm [option(s)] [file(s)]
    有用的options:
    -A 在每个符号信息的前面打印所在对象文件名称;
    -C 输出demangle过了的符号名称;
    -D 打印动态符号;
    -l 使用对象文件中的调试信息打印出所在源文件及行号;
    -n 按照地址/符号值来排序;
    -u 打印出那些未定义的符号;
    常见的符号类型:
    A 该符号的值在今后的链接中将不再改变;
    B 该符号放在BSS段中,通常是那些未初始化的全局变量;
    D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
    T 该符号放在代码段中,通常是那些全局非静态函数;
    U 该符号未定义过,需要自其他对象文件中链接进来;
    W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。

    注意几点:

    -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
    使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
    使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

  2. objdump命令:使用objdump命令可以对可执行文件、静态库和共享对象库进行反编译和分析。使用以下命令:
    objdump -t “
    例如:

    objdump -t libtest.so

    该命令将列出libtest.so库中的所有符号表,其中包括函数名称。

  3. readelf命令:readelf命令也可以用来查看共享对象库中的符号表,包括函数名称。使用以下命令:
    readelf -s “
    例如:

    readelf -s libtest.so

    该命令将列出libtest.so库中的所有符号表,其中包括函数名称。

  4. ldd命令:ldd命令用于显示可执行文件或共享对象库所依赖的动态链接库信息。使用以下命令:
    ldd <可执行文件或so库文件> “
    例如:

    ldd test 或 ldd libtest.so

    该命令将列出test文件或libtest.so库文件依赖的所有动态链接库,其中也包括函数所在的库文件。

  5. objcopy命令:使用objcopy命令可以将so库文件转换成可执行文件形式,然后使用nm命令来查看其中的函数。使用以下命令:
    objcopy –redefine-syms=<符号文件> <可执行文件> nm <可执行文件> “
    例如:

    nm test

    其中,符号文件syms.txt包含了需要重定义的符号和函数名称,objcopy命令将符号文件与so库文件合并生成可执行文件test,然后再使用nm命令查看函数名称。

以上是在Linux中查看共享对象库(so库)函数的一些常用命令,可以根据实际需要选择合适的命令进行使用。

posted @   michaelchengjl  阅读(402)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2022-11-29 Ubuntu18.04升级GLIBC_2.29,解决ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘
2022-11-29 setproctitle 修改进程名 python
点击右上角即可分享
微信分享提示