我需要识别用于生成一些二进制文件,程序,动态和静态库的ABI。
我想询问是否有属性或标签或字符串,我可以使用一些外部工具查看,以查看哪个ABI用于创建该二进制对象。我的对象主要是用于x86和ARM的ELF,而我包括用于调试目的的ABI,就像DWARF那样。
编辑:类似于文件开头的魔术字节,通常用于检测文件的文件格式。
答案 0 :(得分:3)
ELF文件中可能存在多个指示符。
EI_OSABI
字段
.note.ABI-tag
Linux vs. FreeBSD binaries。FreeBSD
使用"品牌" e_indent
字段的保留部分中的签名(从第8个字节开始)。e_flags
field中还有EABI
版本/变体信息,而目标文件也可能包含.ARM.attributes
部分.comment
部分可能包含编译器名称/版本,但它仅供参考 - 操作系统不会使用它来识别ABI,并且通常没有提及特定的ABI信息。.note
部分可能包含可能指向正在使用的ABI的其他信息。在大多数情况下,readelf
会显示必要的信息,但您可能需要添加一些开关(例如-A
以显示.ARM.attributes
部分)。我不认为可以解析.note.ABI-tag
部分,因此您可能需要手动执行此操作。
有关详细信息,请参阅SysV ABI和ARM EABI文档。