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