最近在看《程序员的自我涵养 – 链接、装载与库》
外面提到一个概念「ELF 共享对象」
所以我想晓得:「linux 如何判断一个文件是否是「ELF 共享对象」
问了一下 chatGPT
要判断一个文件是否是 ELF 共享对象(也称为共享库或共享库文件),你能够应用
file
命令并查看文件的类型信息。ELF 共享对象的文件类型通常是 “shared object” 或 “dynamically linked”。上面是如何执行这个操作的步骤:
- 关上终端。
- 应用
file
命令,后跟要查看的文件的门路,如下所示:file /path/to/your/file.so
将
/path/to/your/file.so
替换为你要查看的理论文件门路。
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 库函数和运行时反对。