如何验证是否为ARM 9或ARM11编译了可执行文件? 我编译的应用程序如下: - arm-linux-gnueabihf-gcc -march = armv4t -mfloat-abi = hard -mfpu = vfp -marm -Wall sample.c -o sample
其中一个样本是简单的Hello-world的C程序。
以下是objdump -f
输出
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "7-A"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv3-D16
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_ABI_VFP_args: VFP registers
Tag_ABI_optimization_goals: Aggressive Speed
Tag_CPU_unaligned_access: v6
答案 0 :(得分:0)
这是一个维基帖。 ARM有许多不同的架构,每个架构支持多个CPU。
请参阅:List of ARM CPUs at wikipedia。
Gcc支持两种针对ARM生成代码的概念。
-march
定位架构。-mcpu
定位特定CPU。什么是架构?
体系结构具有指令集(可能的汇编程序),该体系结构中的CPU之间的相同性为95-100%。有时会添加一些除法,更多/扩展浮点寄存器等指令。但是,目的是编译器可以轻松地输出将在这组CPU(相同架构)上运行的代码。每个新架构都试图向后兼容以前的架构。
主要区别在于,即使在相同的架构中,系统寄存器也可能在CPU之间存在很大差异。所以系统/操作系统软件会有很大不同。
如何验证二进制文件所针对的CPU?
您可以使用objdump
或readelf
等工具。任何输出(如 7-A 或 ARMv7-A )都是体系结构参考,您需要知道或查阅表以查找支持的特定CPU。 ARM命名可能令人困惑,因为ARM7与ARMv7完全不同;注意'v'。