我正在查看一些 elf 文件的标题,并注意到一些奇怪的事情:
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
...
Flags: 0x80000027, noreorder, pic, cpic, abi2, mips64r2
...
为什么它被标记为 ELF32 但有一个 mips64r2 标志?这说明什么?这是否意味着该文件被编译为 32 位程序,旨在在 64 位处理器上运行?
另外,如果它在 mips64r2 上运行,为什么机器标记为 MIPS r3000?
如果我想用 qemu 运行它,我需要什么类型的环境? mips64 r2? mips r3000?
答案1
我不是嵌入式 Linux 专家,但最近我正在努力在我的 Busybox 路由器上编写一个“Hello World”应用程序。此外,路由器具有相同的处理器类型 (MIPS R3000)。
与许多嵌入式设备类似,路由器也有嵌入式Linux。尽管它具有不同的处理器和架构,但它是一个 Linux 系统,这就是为什么它支持相同的可执行格式 ELF32/64。
为什么您会看到机器为“MIPS R3000”,标志为“mips64r2”,这些表明了它所针对的架构和特定处理器类型。不同的处理器可能使用相同的体系结构,并且同一体系结构可能会看到不同的标志。然而,有一件事引起了我的注意,R3000 是 32 位架构,在我的例子中,标志是“mips32”,所以在 32 位架构和 32 位 ELF 文件上看到 mips64r2(我猜它是 64 位)有点奇怪。
你可以查看MIPS官方文档。我希望它有帮助