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

2024-10-23 08:47:00
admin
原创
77
摘要:问题描述:如何轻松找出 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)

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用