• Linux下,查看 可执行文件 依赖的 动态库的几个方法


    本文介绍在Linux下查看可执行文件的4个方法,前面两个方法是在可执行文件没运行的状态下,后面两个方法在可执行文件运行(即进程)的状态下使用的。文中使用的可执行文件 iperf3 是在测试网络状态的工具,在 https://iperf.fr/iperf-download.php 下载的

    一、查看可执行文件的依赖动态库的2个方法

    1.1 使用ldd命令查看可执行文件的依赖动态库

    使用方法

    ldd 可执行文件
    
    • 1

    例子:使用ldd命令查看iperf3的依赖动态库

    # ldd iperf3 
            linux-vdso.so.1 =>  (0x00007ffdc7119000)
            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc5c1a28000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc5c165f000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fc5c1d2e000)
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:某些版本的ldd命令可能会直接调用可执行文件来识别其动态库依赖关系,所以如果可执行文件不受信任,使用ldd命令会有风险。在Ubuntu14.04中的ldd命令实质上是一个shell脚本,可以使用vi /usr/bin/ldd查看

    1.2 使用objdump命令查看可执行文件的依赖动态库

    使用方法

    objdump -p 可执行文件 | grep NEEDED
    
    • 1

    例子:使用objdump 命令查看iperf3的依赖动态库

    # objdump -p iperf3 | grep NEEDED          
      NEEDED               libm.so.6
      NEEDED               libc.so.6
    # 
    
    • 1
    • 2
    • 3
    • 4

    二、查看某个进程的依赖动态库的2个方法

    2.1 使用pmap查看进程的依赖动态库

    pmap是报告进程的内存映射,同时也会显示正在运行的进程的共享库依赖关系。
    使用方法:先查找进程的PID,再调用pmap查看

    ps aux | grep 可执行文件
    pmap 进程ID
    
    • 1
    • 2

    例子

    # ps aux | grep iperf3
    lu        23430  0.0  0.0   7544   928 pts/14   S    16:22   0:00 ./iperf3 -s
    lu        23476  0.0  0.1  15956  2224 pts/14   S+   16:33   0:00 grep --color=auto iperf3
    # pmap 23430
    23430:   ./iperf3 -s
    0000000000400000    104K r-x-- iperf3
    0000000000619000      4K r---- iperf3
    000000000061a000      4K rw--- iperf3
    000000000061b000      4K rw---   [ anon ]
    000000000254a000    132K rw---   [ anon ]
    00007f359349b000   1784K r-x-- libc-2.19.so
    00007f3593659000   2048K ----- libc-2.19.so
    00007f3593859000     16K r---- libc-2.19.so
    00007f359385d000      8K rw--- libc-2.19.so
    00007f359385f000     20K rw---   [ anon ]
    00007f3593864000   1044K r-x-- libm-2.19.so
    00007f3593969000   2044K ----- libm-2.19.so
    00007f3593b68000      4K r---- libm-2.19.so
    00007f3593b69000      4K rw--- libm-2.19.so
    00007f3593b6a000    140K r-x-- ld-2.19.so
    00007f3593d71000     16K rw---   [ anon ]
    00007f3593d8b000      4K rw---   [ anon ]
    00007f3593d8c000      4K r---- ld-2.19.so
    00007f3593d8d000      4K rw--- ld-2.19.so
    00007f3593d8e000      4K rw---   [ anon ]
    00007ffcd9dad000    132K rw---   [ stack ]
    00007ffcd9de4000     12K r----   [ anon ]
    00007ffcd9de7000      8K r-x--   [ anon ]
    ffffffffff600000      4K r-x--   [ anon ]
     total             7548K
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    2.2 使用pldd查看进程的依赖动态库

    使用方法

    ps aux | grep 可执行文件
    pldd 进程ID
    
    • 1
    • 2

    例子

    # sudo pldd 23430
    23430:  /home/samba/00_thirdLib/iperf/iperf-3.1.3/result_gcc/bin/iperf3
    
    • 1
    • 2

    总结:

    以上4个方法可以查看可执行程序的依赖动态库,pldd命令在Ubuntu14.04的运行环境下,没有打印,可能存在问题,前面三个命令都可以大致地查看到可执行文件的依赖动态库。

    参考:
    https://www.xmodulo.com/check-library-dependency-program-process-linux.html

  • 相关阅读:
    java设计模式(一)——五种创建型设计模式
    个人博客管理系统
    线上事故竟然是自己的锅!!!
    0.网络是怎么连接的 --- 前言
    querySelectorAll()和querySelector()
    【Flyway 介绍】
    Spring源码阅读-ClassPathXmlApplicationContext
    Django--28Django官版UI细节调整及使用simpleui换肤
    python+vue实验室课程预约管理系统
    基于springboot的作业管理系统设计与实现
  • 原文地址:https://blog.csdn.net/wkd_007/article/details/126121134