【问题标题】:Understanding the output of ldd了解 ldd 的输出
【发布时间】:2010-06-08 08:38:32
【问题描述】:

我很难理解 ldd 的输出——尤其是处理器标识符。 有问题的字符串是这个:

Shortest.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, from ']', not stripped

我有几个问题:

  • “ELF”是什么意思?我知道这就是 Linux 二进制文件的名称(Windows 二进制文件称为 PE 二进制文件、“可移植的可执行文件”二进制文件),但 ELF 不是某种东西的缩写吗?
  • LSB 是什么意思?我什至猜不出来...
  • 我在那里看到字符串“Intel”,现在我非常想知道 Linux 二进制文件的可移植性,因为 ldd 似乎期望每个二进制文件都在英特尔处理器上编译...但是如果它不是在英特尔处理器?或者,当我尝试在未在英特尔处理器上运行的计算机上运行二进制文件时?
  • 为什么是“]”?我的猜测是它应该是某种链接器标识,但 ']' 看起来不太像标识符......

提前致谢

【问题讨论】:

  • 添加到下面的答案中,它是“Intel 80386”,因为这就是 CPU 代码在 ELF 常量定义中注册的内容。但是,所有现代 CPU 都将兼容。即使浏览 glibc 源,我也找不到“来自”的答案。

标签: linux ldd


【解决方案1】:

ELF 是可执行和可链接格式 - 它指定库的格式 - 请参阅 Executable and Linkable Format。 LSB 指定数据的字节顺序。英特尔 386 意味着它将在与 386 兼容的所有芯片上运行,包括奔腾和 AMD 的芯片,但不包括(例如)Power PC 或 IBM/370 架构。

至于']',这个库与测试实用程序没有任何关系,对吗?让你说:

if test -x foobar

if [ -x foobar ]

在 shell 脚本中。

【讨论】:

  • ldd 本身是一个 shellscript,所以是的,它可能是 /bin/[ (或 shellbuiltin) - 不过,很好的答案,谢谢!
【解决方案2】:
  • ELF
  • LSB
  • Intel:Linux 二进制文件并不意味着可移植 accros CPU 和架构。这个是用来在 CUP 上使用的 运行 Intel 80386 二进制代码。
  • ']': ??

【讨论】:

  • 感谢您的链接。虽然我想知道为什么 Linux 二进制文件会被设计为 可移植。不计算,恕我直言。
  • Linux 二进制文件不可移植。 Windows 二进制文件不可移植。 Solaris 二进制文件不可移植。 AIX 二进制文件不可移植...要可移植,二进制格式必须在解释器(本身不可移植)上运行,而不是在真正的 CPU 硬件上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2019-02-13
  • 2012-10-21
  • 2018-09-22
相关资源
最近更新 更多