确定 Linux 二进制文件的直接共享对象依赖关系?

2024-10-23 08:47:00
admin
原创
334
摘要:问题描述:如何轻松找出 ELF 格式的 Linux 二进制文件的直接共享对象依赖项?我知道 ldd 工具,但是它似乎输出二进制文件的所有依赖项,包括该二进制文件所依赖的任何共享对象的依赖项。解决方案 1:您可以使用它readelf来探索 ELF 标头。readelf -d将列出直接依赖项作为NEEDED部分。...

问题描述:

如何轻松找出 ELF 格式的 Linux 二进制文件的直接共享对象依赖项?

我知道 ldd 工具,但是它似乎输出二进制文件的所有依赖项,包括该二进制文件所依赖的任何共享对象的依赖项。


解决方案 1:

您可以使用它readelf来探索 ELF 标头。readelf -d将列出直接依赖项作为NEEDED部分。

 $ readelf -d elfbin

Dynamic section at offset 0xe30 contains 22 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libssl.so.1.0.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000c (INIT)               0x400520
 0x000000000000000d (FINI)               0x400758
 ...

解决方案 2:

如果要递归查找依赖项(包括依赖项的依赖项、依赖项的依赖项的依赖项等等)...

您可以使用ldd命令。ldd-
打印共享库依赖关系

解决方案 3:

objdump工具可以告诉您这些信息。如果您objdump使用该-x选项调用,让它输出所有标题,那么您会在“动态部分”的开头找到共享对象依赖项。

例如,objdump -x /usr/lib/libXpm.so.4在我的系统上运行会在“动态部分”中提供以下信息:

Dynamic Section:
  NEEDED               libX11.so.6
  NEEDED               libc.so.6
  SONAME               libXpm.so.4
  INIT                 0x0000000000002450
  FINI                 0x000000000000e0e8
  GNU_HASH             0x00000000000001f0
  STRTAB               0x00000000000011a8
  SYMTAB               0x0000000000000470
  STRSZ                0x0000000000000813
  SYMENT               0x0000000000000018
  PLTGOT               0x000000000020ffe8
  PLTRELSZ             0x00000000000005e8
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000001e68
  RELA                 0x0000000000001b38
  RELASZ               0x0000000000000330
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000001ad8
  VERNEEDNUM           0x0000000000000001
  VERSYM               0x00000000000019bc
  RELACOUNT            0x000000000000001b

直接共享对象依赖项被列为“NEEDED”值。因此在上面的示例中,libXpm.so.4在我的系统上只需要libX11.so.6libc.so.6

值得注意的是,这并不意味着传递给的二进制文件所需的所有符号objdump都会出现在库中,但它至少显示了加载器在加载二进制文件时将尝试加载哪些库。

解决方案 4:

ldd -v 打印“版本信息:”部分下的依赖关系树。该部分中的第一个块是二进制文件的直接依赖项。

参见分层 ldd(1)

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用