如何在ELF中解释.ARM.attributes中的数据以获得架构版本和其他属性?

如何在ELF中解释.ARM.attributes中的数据以获得架构版本和其他属性?,arm,elf,eabi,Arm,Elf,Eabi,我最感兴趣的是提取体系结构版本,即v5、v5T等。我一直在参考,这有助于我达到这一点。我可以找到.ARM.attributes部分的开头,并可以解析信息的第一个关键部分:格式版本、部分长度和供应商名称+空字节,没有问题。从那以后我有点迷路了。下面是我在一个elf上运行的快照,该elf是用armv5t体系结构的ARMLinux gnueabi gcc-march=armv5t-O myprog.c-O myprog编译的。该段的起点为77f0b 我们可以看到: 格式版本:A 段长:0x29 供应

我最感兴趣的是提取体系结构版本,即v5、v5T等。我一直在参考,这有助于我达到这一点。我可以找到.ARM.attributes部分的开头,并可以解析信息的第一个关键部分:格式版本、部分长度和供应商名称+空字节,没有问题。从那以后我有点迷路了。下面是我在一个elf上运行的快照,该elf是用armv5t体系结构的ARMLinux gnueabi gcc-march=armv5t-O myprog.c-O myprog编译的。该段的起点为77f0b

我们可以看到: 格式版本:A

段长:0x29

供应商名称:“aeabi”

很明显,5T在77f1C上以ASCII格式提供,但我不确定如何解释需要解析的标记以获得该值

注意:是的,我知道我可以使用一些工具来完成这项工作,但我需要提取我正在编写的应用程序中的信息。它已经分析了必要的信息,以使它走到这一步


附加问题:PowerPC是否有类似的标签?我找不到任何支持文档。

这些标记记录在中(注意:链接可能指向过时版本)。例如,在第2.3.5.2节(目标相关属性)中,我们了解到
Tag\u CPU\u arch
的值为6,紧跟在转储中的
Tag\u CPU\u name
(5,在
5T
之前)。根据文档中的表格,它的参数是3,同样对应于ARM v5T。下一个标记是
tag\u ARM\u ISA\u use
(8),参数为1,表示用户希望该实体可以使用ARM指令(无论这意味着什么),依此类推

请注意,整数是以uleb128格式编码的,尽管这在这里并不明显。该编码在第3部分第7.6节中进行了描述。基本上,它是base-128,little-endian,您需要在设置MSB时继续读取