我最感兴趣的是提取架构版本,即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
编译的elf上使用arm-linux-gnueabi-gcc -march=armv5t -O myprog.c -o myprog
运行的快照,用于ARMv5T架构。该部分的开头是77f0b。
我们可以看到: 格式版本:A
部分长度:0x29
供应商名称:" aeabi"
显然,5T在77f1C下以ASCII格式提供,但我不知道如何解释我需要解析的标签以获得该值。
注意:是的,我知道有一些工具可以用来执行此操作,但我需要在我正在编写的应用程序中提取信息。它已经解析了必要的信息,以实现这一目标。
奖金问题:PowerPC有类似的标签吗?我找不到任何支持文件。
答案 0 :(得分:3)
这些标记记录在Addenda to, and Errata in, the ABI for the ARM Architecture中(注意:链接可能会转到过时的版本)。例如,在第2.3.5.2节(与目标相关的属性)中,我们了解到Tag_CPU_arch
的值为6,紧跟在Tag_CPU_name
之后(5,在{{1}之前) {1}})在您的转储中。根据文档中的表格,它的参数是3,它再次对应于ARM v5T。下一个标记是5T
(8),参数为1,意思是用户希望该实体可以使用ARM指令(无论这意味着什么),依此类推。
请注意,整数以uleb128格式编码,但这里不明显。这种编码在DWARF standard中描述(在DWARF 3的第7.6节中)。基本上,它是基本的128,小端,你需要在MSB设置时继续阅读。