arm - 如何在 ELF 中解释 .ARM.attributes 中的数据以获取体系结构版本和其他属性?

标签 arm elf eabi

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

enter image description here

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

段长度:0x29

供应商名称:“aeabi”

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

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

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

最佳答案

这些标签记录在 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,小端,并且您需要在设置 MSB 时继续阅读。

关于arm - 如何在 ELF 中解释 .ARM.attributes 中的数据以获取体系结构版本和其他属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380570/

相关文章:

c++ - arm gcc5 的交叉编译 - 正确使用 memcpy

code-generation - 为什么 Go 使用自己的代码生成器?

c - 32 位处理器上的 64 位/64 位余数查找算法?

安卓NDK : gdb crashes when connecting

android - 为什么 LTO 在 armv8a NDK 构建中引入新的 DT 标志 TLSDESC_PLT 和 TLSDESC_GOT

gcc - 为 ARM-EABI 编译 Linux 内核但使用 4 字节大类型对齐?

c++ - 如何在 X86 PC 上为 arm 编译 gcc 编译器

c - 内核函数 load_elf_binary 中的变量 elf_entry 是我用 readelf -h 获得的入口点吗

assembly - 在 yasm 中指定 ELF32 部分的物理地址?