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

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

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

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

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

使用方法

ldd 可执行文件

例子:使用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)
# 

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

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

使用方法

objdump -p 可执行文件 | grep NEEDED

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

# objdump -p iperf3 | grep NEEDED          
  NEEDED               libm.so.6
  NEEDED               libc.so.6
# 

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

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

pmap是报告进程的内存映射,同时也会显示正在运行的进程的共享库依赖关系。

使用方法:先查找进程的PID,再调用pmap查看

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

例子

# 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
# 

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

使用方法

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

例子

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

总结:

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

参考:

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


目录
相关文章
|
1月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
18天前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
261 10
|
2月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
279 13
|
1月前
|
Ubuntu Linux 图形学
推广与体验Ubuntu Linux的便捷方法
如果你的朋友或家人对尝试Linux感兴趣,但希望在安装之前先体验一下,你可以分享以下链接给他们:Ubuntu在线导览。通过这个链接,他们可以在任何地方轻松体验Ubuntu,无需安装即可深入了解这个流行的操作系统。
|
1月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
134 0
|
3月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
110 16
|
2月前
|
网络协议 Ubuntu Linux
Wireguard in Linux的安装方法
本文介绍了如何在Ubuntu和Rocky Linux中安装配置WireGuard,并探讨了配置过程中可能出现的DNS泄露问题及解决方法,包括通过nmtui设置DNS及调整DNS优先级参数。
|
2月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
597 13
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
374 21