我最感兴趣的是提取体系结构版本,即 v5、v5T 等。我一直在参考Elf 的 ARM 体系结构部分 4.3.6 构建属性,这有助于我达到这一点。我可以找到.ARM.attributes部分的开头,并且可以解析信息的第一个关键部分:Format-version,Section-length和vendor-name + null byte,没问题。在那之后我有点失落。下面是我在为 ARMv5T 架构hexdump -vC编译的精灵上运行的快照arm-linux-gnueabi-gcc -march=armv5t -O myprog.c -o myprog。该部分的开头是 77f0b。
我们可以看到: Format-version: A
段长度:0x29
供应商名称:“aeabi”
显然,5T 在 77f1C 以 ASCII 形式提供,但我不确定如何解释我需要解析以获得该值的标签。
注意:是的,我知道我可以使用一些工具来执行此操作,但我需要在我正在编写的应用程序中提取信息。它已经解析了必要的信息,以使其走到这一步。
额外问题:PowerPC 是否有类似的标签?我找不到任何支持文档。
我进入了一个项目,该项目采用了一个头文件的方法,MyProject.h该文件包含每个.c文件的所有头文件.每个.c文件都有自己的头文件#include "MyProject.h",无论需要什么库,还有文件所需的任何其他声明.
对我来说,这似乎是多余的,有点不自然,但它编译并随后按预期运行.我的想法是编译器会做更多的工作而不是必要的,并且可能会使.exe过度膨胀.这样做的缺点是什么?
我接下来的一个问题就是说,我使用上面的例子在一个文件中包含了一个像Time.h这样的库.由于MyProject.h,编译器是否只将Time.h构建到二进制文件或现在的每个文件中?结构,枚举等怎么样?