码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

  • 相关阅读:
    【前端版】分布式医疗云平台【登陆页面修改、页面 title 修改、登陆接口准备说明、把前端和后端统一使用 git 管理、启动前端 VUE 项目、用户登陆】(十七)
    java-php-python-ssm水星家纺网站计算机毕业设计
    北斗导航 | 基于奇偶矢量法的RAIM之SSE探索(附奇偶矢量法源代码)
    不懂 Kubernetes 实现云原生是什么体验?
    【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片
    TCP/IP协议专栏——ARP详解——网络入门和工程维护必看
    特种期货开户交易权限开通认定标准
    面试官让你说说react状态管理?
    JavaSE 第八章 Java常用类
    腾讯云多Kubernetes集群高可用运维实践
  • 原文地址:https://blog.csdn.net/wkd_007/article/details/126121134
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号