4

我最感兴趣的是提取架构版本,即 v5、v5T 等。我一直在参考Elf 的 ARM 架构第 4.3.6 节构建属性,这对我了解这一点很有帮助。我可以找到 .ARM.attributes 部分的开头,并且可以解析信息的第一个关键部分:Format-version、Section-length 和 vendor-name + null 字节,没问题。在那之后我有点失落。下面是我在使用ARMv5T 架构hexdump -vC编译的精灵上运行的快照。arm-linux-gnueabi-gcc -march=armv5t -O myprog.c -o myprog该部分的开始是 77f0b。

在此处输入图像描述

我们可以看到: Format-version: A

节长:0x29

供应商名称:“aeabi”

显然,5T 在 77f1C 以 ASCII 形式提供,但我不确定如何解释我需要解析以获得该值的标签。

注意:是的,我知道我可以使用一些工具来执行此操作,但我需要在我正在编写的应用程序中提取信息。它已经解析了必要的信息以使其达到这一目标。

额外问题:PowerPC 有类似的标签吗?我找不到任何支持文件。

4

1 回答 1

7

这些标签记录在ABI for the ARM Architecture 的附录和勘误表中(注意:链接可能指向过时的版本)。例如,在第 2.3.5.2 节(目标相关属性)中,我们了解到它Tag_CPU_arch的值为 6,它紧跟在转储中的Tag_CPU_name(5,在 之前)之后。5T根据文档中的表格,它的参数是 3,这又对应于 ARM v5T。下一个标签是Tag_ARM_ISA_use(8),参数为 1,表示用户希望该实体可以使用 ARM 指令(无论这意味着什么),依此类推。

请注意,整数以 uleb128 格式编码,尽管这在这里并不明显。这种编码在DWARF 标准中进行了描述(在 DWARF 3 的第 7.6 节中)。基本上,它是 base-128,小端,在设置 MSB 时您需要继续阅读。

于 2017-11-11T14:57:39.347 回答