ELF 或二进制文件中有特定 ABI 的签名吗?

use*_*710 2 x86 arm elf abi

我需要确定用于生成一些二进制文件、程序、动态和静态库的 ABI。

我想问一下是否有一个属性、一个标签或一个字符串,我可以用一些外部工具检查以查看哪个 ABI 用于创建该二进制对象。我的对象主要是用于 x86 和 ARM 的 ELF,我也包括用于调试目的的 ABI,例如 DWARF 对象。

编辑:类似于文件开头的魔术字节,通常用于检测文件的文件格式。

Igo*_*sky 5

ELF 文件中可能存在多种指标。

  1. ELF 头标识EI_OSABI字段
  2. .note.ABI-tag用于标记如Linux与FreeBSD的二进制文件
  3. FreeBSDe_indent字段的保留部分使用“品牌”签名(从第 8 个字节开始)。
  4. 对于 ARM 文件,您还可以EABI在该e_flags字段中包含版本/变体信息,并且目标文件也可能包含该.ARM.attributes部分
  5. .comment 部分可能包含编译器名称/版本,但它仅供参考 - 操作系统不使用它来识别 ABI,并且通常不提及特定的 ABI 信息。
  6. .note部分可能包含可能指向正在使用的 ABI 的附加信息。

在大多数情况下,readelf将显示必要的信息,但您可能需要添加一些开关(例如-A显示.ARM.attributes部分)。我认为没有任何内容可以解析该.note.ABI-tag部分,因此您可能必须手动进行。

有关更多信息,请参阅 SysV ABI 和 ARM EABI 文档。