0

我有一个正在上传的文件(一个 *.wim 文件,可以是 32 位或 64 位 - WAIK/WADK)。

wim 文件被复制到一个位置。

之前我们只支持 32 位,但现在为了 UEFI,我们需要同时支持 32 位(用于 BIOS)和 64 位(用于 UEFI)。

现在,上传完成后,目的是基于文件类型,我会将其复制到 32 位或 64 位文件夹。

如何区分它?

PS:删除了 win 标签,因为这更像是对文件类型的一般确定,而不是 WIM。

4

1 回答 1

2

如果我们不考虑 WIM 问题,只考虑找到编译 exe 文件(Portable Executable)的架构,这相对简单:

  • 该文件必须以两个字节 0x4d、0x5a 开头,相当于字符串“MZ”的 ASCII 编码。
  • 在偏移量 0x3c 处,读取 4 字节 little-endian 编码以获得 PE 标头的偏移量。
  • 在偏移“PE header”处,您应该检查四个字节 0x50、0x45、0x00、0x00,相当于字符串“PE\0\0”的 ASCII 编码。
  • 紧跟在 PE 头之后,您会发现一个 20 字节长的 COFF 文件头。机器类型在 COFF 标头的前两个字节中编码(小端)。

与您的情况相关的可能是机器类型 0x014c (i386) 和 0x8664 (AMD64)。

有关更多详细信息,您可以在此处从 Microsoft 获取 PE 规范。2.3.1 节列出了不同的机器类型。

您可能还对检查 COFF 标头的特征字段(最后两个字节)以将文件标识为可执行文件(而不是例如 DLL 文件)感兴趣。

于 2013-01-21T17:02:36.067 回答