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

2024-10-23 08:47:00
admin
原创
311
摘要:问题描述:如何轻松找出 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用