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

标签 x86 arm elf abi

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

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

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

最佳答案

ELF 文件中可能存在多个指示符。

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

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

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

关于x86 - ELF 或二进制文件中有特定 ABI 的签名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26428120/

相关文章:

c++ - 线性代数的CPU指令集?

c - 用于读取的原子 block 与 ARM SysTicks

C++ 隐藏符号增加重定位时间

linux - 用 gcc 汇编 32 位 x86 代码?

c - 如何将汇编程序值返回给 C Int 指针?

android - 如何为双显示器配置 Android x86(即克隆)?

binary - ELF对象中的多个字符串表

linux - 有什么方法可以确定 Linux 可执行文件是否在 ARM 处理器上使用软 float ?

c - 如何从 linux 用户空间进行数据缓存刷新/失效

linux - 如何找到带有标题信息的 ELF 文件/图像的大小?