【问题标题】:How can I interpret the data in .ARM.attributes in an ELF to get the architecture version and other attributes?如何解释 ELF 中 .ARM.attributes 中的数据以获取架构版本和其他属性?
【发布时间】:2018-01-04 22:35:15
【问题描述】:

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

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

节长度:0x29

供应商名称:“aeabi”

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

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

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

【问题讨论】:

    标签: arm elf eabi


    【解决方案1】:

    这些标签记录在Addenda to, and Errata in, the 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 standard 中描述(在 DWARF 3 的第 7.6 节中)。基本上,它是 base-128,little endian,你需要在设置 MSB 时继续阅读。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多