最近在看 《程序员的自我修养--链接、装载与库》

里面提到一个概念「ELF共享对象」

所以我想知道:「linux 如何判断一个文件是否是「ELF共享对象」

图片.png

问了一下 chatGPT

要判断一个文件是否是 ELF 共享对象(也称为共享库或共享库文件),你可以使用 file 命令并查看文件的类型信息。ELF 共享对象的文件类型通常是 "shared object" 或 "dynamically linked"。下面是如何执行这个操作的步骤:

  1. 打开终端。
  2. 使用 file 命令,后跟要检查的文件的路径,如下所示:
file /path/to/your/file.so

/path/to/your/file.so 替换为你要检查的实际文件路径。

  1. file 命令将输出文件的详细信息,包括文件类型。查找文件类型信息,如果看到 "shared object" 或 "dynamically linked",则表示该文件是一个 ELF 共享对象。

例如,如果文件是 ELF 共享对象,输出可能类似于:

/path/to/your/file.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

这个输出表明文件是一个 64 位的 ELF 共享对象,是动态链接的,可以作为共享库在程序中使用。

请注意,要运行 file 命令,你的系统上需要安装 file 工具。大多数 Linux 发行版都默认安装了它,但如果你使用的是其他操作系统,可能需要手动安装。

所以只要用 file 命令就行了

比如我用 file 命令去看一个 .so 文件

比如
file /lib/x86_64-linux-gnu/libc.so.6 输出如下:

/lib/x86_64-linux-gnu/libc.so.6: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=69389d485a9793dbe873f0ea2c93e02efaa9aa3d, for GNU/Linux 3.2.0, stripped

表示的含义是:

根据你提供的输出,/lib/x86_64-linux-gnu/libc.so.6 文件是一个 64 位的 ELF 共享对象。以下是关于这个文件的详细信息:

  • 文件类型:ELF 64-bit LSB shared object
  • 架构:x86-64
  • 版本信息:version 1 (GNU/Linux)
  • 链接方式:dynamically linked
  • 解释器(动态链接器):/lib64/ld-linux-x86-64.so.2
  • BuildID:69389d485a9793dbe873f0ea2c93e02efaa9aa3d
  • 适用于 GNU/Linux 版本:3.2.0
  • 是否剥离(stripped):是(表示调试信息已被删除)

这个文件是 C 库的一部分,它是一个标准的共享库,用于支持运行在 64 位 x86-64 架构上的程序。它是一个动态链接库,可以被其他程序动态加载和链接,提供标准的 C 库函数和运行时支持。


universe_king
3.4k 声望680 粉丝