Linux ldd命令详解

news/2025/3/9 13:30:08/文章来源:https://www.cnblogs.com/I989809/p/18757917

在Linux操作系统中,程序运行依赖于各种各样的共享库(动态链接库),而 ldd命令是一种强大的工具,它允许用户查看某个可执行文件所需的共享库列表及其路径。这个命令对开发者、系统管理员以及需要调试程序时查找库依赖问题的人来说极其有用。

ldd命令的基本使用

ldd的基本语法非常直接:

ldd [选项] 文件名
 
 

例如,若想查看 /bin/ls这个命令所需的共享库,你可以运行:

ldd /bin/ls
 
 

结果会显示一系列的库文件及其对应的路径,这可能包含了像libc.so.6这样的标准库,也可能是其他自定义的动态库。

ldd命令的选项

ldd提供了一些有用的选项来增强其功能:

  • -v: 显示所有的库版本信息。
  • -u: 显示未使用的直接依赖。
  • -d: 检查数据段(数据重定位)问题。
  • -r: 检查数据段和函数段(运行时重定位)问题。

例如,为了获得更详细的版本信息,你可以使用:

ldd -v /bin/ls
 
 

解读ldd的输出

输出中的每一行通常有三部分:

  1. 库的名称。
  2. 库的内存地址,表明它被加载到内存中的位置。
  3. 库的实际路径。

例如:

linux-vdso.so.1 =>  (0x00007ffc53960000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f76e9250000)
/lib64/ld-linux-x86-64.so.2 (0x0000559a4add1000)
 
 

这显示了 linux-vdso.so.1没有指定路径,它是一个特殊的虚拟动态共享对象,由内核直接提供给进程的。libc.so.6位于 /lib/x86_64-linux-gnu/目录下,同时显示了其加载到内存中的地址。

安全警告

事实上,使用 ldd对不可信的可执行文件进行检测时需要特别小心,因为 ldd实际上可能会调用这些文件。对不受信任的可执行文件,使用 ldd可能会因为某些恶意代码的执行而导致安全风险。因此,对于来历不明的可执行文件,最好避免使用 ldd来检查它们的库依赖。

替代方法

如果出于安全考虑不想用 ldd,可以使用其他的工具来分析库依赖,例如 objdump。虽然不如 ldd直观,但相对更为安全。以下是一个使用 objdump的示例:

objdump -p /bin/ls | grep NEEDED
 
 

该命令列出了 /bin/ls需要的库,这相当于 ldd显示的部分信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895131.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习笔记:DS-区间类问题

DS:区间类问题 前言 对于区间或区间子区间问题,我们有一些惯用套路简化问题。 很多区间问题都可以转化为平面上矩形问题,用扫描线就可以解决。具体地,我们把区间 \([l,r]\) 抽象为平面内的点 \((l,r)\)。 同时我们可以使用反演的思路,考虑每个值对哪些询问如何造成贡献,而…

vuepress中引入本地资源

二次封装了一个jessibuca的组件 使用vuepress写文档一时不知如何引入jessibuca.js文件 于是搜索且验证以下可行方式 // .vuepress/config,js 文件 添加head配置项 module.exports = {...head: [[script, { src: /jessibuca-pro.js }]]... }jessibuca.js和decoder.js文件放在pub…

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载

VMware ESXi 6.7 U3v (ESXi670-202503001) 下载VMware ESXi 6.7 U3v (ESXi670-202503001) 下载 VMware ESXi 6 Extend Support Release 🆓 🔄 请访问原文链接:https://sysin.cn/blog/vmware-esxi-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org2025-03-0…

Linux系统离线安装docker环境

1 下载docker的安装文件 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 2 解压 tar -zxvf docker-18.06.3-ce.tgz 3 复制 cp ./docker/* /usr/bin 4 创建docker.service文件 cd /etc/systemd/system/ touch docker.service 5 编辑docker.service文件 vi …

告别Qt,拥抱CUTOS - 智能设备应用开发新选择

本文探讨了在智能设备应用开发领域,从传统Qt框架向新兴CUTOS框架的转变。CUTOS在开发效率、稳定性、学习门槛和生态融合等方面表现突出,将成为更具前瞻性的开发框架。一、引言 Qt是一个功能强大且历史悠久的跨平台C++应用开发框架,由芬兰公司Qt Company开发。Qt在汽车、航空…

k3s高可用集群搭建

机器统一操作 # 更新yum源数据 # 复制ContOS-Base.repo到/etc/yum.repos.d/ yum makecache yum update -y# 安装vim yum install -y vim# 关闭swap vim /etc/fstab 注释掉最后一行 # /dev/mapper/centos-swap swap swap defaults 0 0 swapoff -a#…

kylin v10 sp2升级glibc到2.29和2.31

目录环境安装glibc2.29安装glibc2.31 环境 [root@kyline10 ~]# cat /etc/os-release NAME="Kylin Linux Advanced Server" VERSION="V10 (Sword)" ID="kylin" VERSION_ID="V10" PRETTY_NAME="Kylin Linux Advanced Server V10 (…

pycharm连接CentOS虚拟机并执行Spark

pycharm连接虚拟机注意:pycahrm远程使用ssh连接虚拟机需要专业版在CentOS7的虚拟机当中,会自带一个python2.6老版本的python,所以自己准备一个python3.x版本的解释器,如python3.9 一、前置准备工作 # 安装前置依赖 yum install zlib-devel bzip2-devel openssl-devel ncurs…

02_openai开发

基本概念Tokens(标记):在自然语言处理中,token是输入文本被分割成的小单元。一个token可以是一个单词、一个子词,甚至是一个字符。这取决于文本的具体分割方式。OpenAI常用参数 1. max_tokens(最大token数) 定义:指令生成的回答中包含的最大token数。例如,如果设置为1…

day20 yum的详细的讲述

day20 yum的精讲 yum是centos 7中很重要的工具需要我们去了解和学习 1.学习的任务和背景 一般开发团队需要数据库的环境来测试程序 现在需要运维人员来协助在测试机器上Centos7上安装好 MySQL-5.6.43版本来作为前期迁移的准备的工作 同时== 配备好本地的yum源==方便后续软件包的…

Active Directory审核的常见误区(3)

一、忽略过时、未激活和孤立的用户帐户 存在未使用的用户帐户在AD域中是一个重大的安全隐患。离职员工和黑客可能会因此漏洞而去窃取企业的重要资源。这时候,制定处理离职员工的策略就显得至关重要,这包括禁用他的AD用户帐户、将他从电子邮件组中删除、撤销他对业务应用程序的…

java.net.UnknownHostException: upload-as0.qiniup.com: Name or service not known on问题排查

参考地址:https://blog.csdn.net/weixin_43700340/article/details/88393833 ping upload-as0.qiniup.com还有百度不通,但是局域网可以ping通ping网关可以ping通,ping公共地址也可以ping通如果直接ping百度的ip是可以通的通过上面的博客知道应该是DSN出了问题 也试过了这个命…