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

时间:2014-10-17 15:13:50

标签: x86 arm elf abi

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

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

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

1 个答案:

答案 0 :(得分:3)

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

  1. ELF header ident
  2. EI_OSABI字段
  3. 用于标记例如的.note.ABI-tag Linux vs. FreeBSD binaries
  4. FreeBSD使用"品牌" e_indent字段的保留部分中的签名(从第8个字节开始)。
  5. 对于ARM文件,您在e_flags field中还有EABI版本/变体信息,而目标文件也可能包含.ARM.attributes部分
  6. .comment部分可能包含编译器名称/版本,但它仅供参考 - 操作系统不会使用它来识别ABI,并且通常没有提及特定的ABI信息。
  7. .note部分可能包含可能指向正在使用的ABI的其他信息。
  8. 在大多数情况下,readelf会显示必要的信息,但您可能需要添加一些开关(例如-A以显示.ARM.attributes部分)。我不认为可以解析.note.ABI-tag部分,因此您可能需要手动执行此操作。

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