确定 PE 文件的字节序(ARM 上的 Windows?)

逆向工程 手臂 聚乙烯
2021-06-27 21:15:00

对于 ELF 文件,在 ELF 标头开头附近有一个字段,用于指示文件的字节序:e_ident[EI_DATA]如果应用程序想要从给定 ELF 二进制文件的标头中提取数据,该字段可用于了解是否需要对提取的整数值进行字节序调整

是否有一个等效的过程来确定给定 PE 文件的字节序,或者假设所有 PE 文件将对存储的整数值使用很少的字节序是否安全?

遇到的大多数 PE 文件可能会针对 x86 或 x86_64 进行编译(因此将使用小字节序),但问题在于为 ARM/ARM64 上的 Windows 构建的 PE 文件,因为许多 ARM 处理器具有大字节序和小字节序操作模式。此外,本文暗示 Windows 也支持/支持在其他体系结构(如 MIPS)上运行,这些体系结构也可能支持大字节序。

1个回答

Windows 平台具有固定的字节序,不支持运行不同的字节序文件。文件格式本身总是使用小端字段。

AFAIK 唯一支持 big-endian 的 Windows 平台是 Xbox 360(又名 Xenon),它可以通过机器值0x01F2(未公开记录但可能IMAGE_FILE_MACHINE_PPCBE在源头中定义)来识别此类文件使用小端标头,但包含大端指令和数据。

所有其他 Windows 平台(甚至更早的 MIPS 和 PowerPC NT 版本)仅支持小端配置。

此外,ARM 上的 Windows 又名 Windows RT 平台 (ARMv7, IMAGE_FILE_MACHINE_ARMNT=0x01c4) 仅正式支持 Thumb 模式指令。(早期的 Windows CE 版本也支持经典的 ARM 模式)。