如何确定 Windows 10 上可执行二进制文件的体系结构

How do I determine the architecture of an executable binary on Windows 10

给定 Windows 上的一些 Random.exe,我如何确定

  1. 其 CPU 架构,例如 Intel/ARM,以及
  2. 它的位数,例如 32 或 64。

文件资源管理器中是否有 属性 我可以使用的其他工具或编程方法?

可执行文件的架构写在 COFF 的 Machine 字段中 header。您可以通过编程方式或使用十六进制编辑器手动检索它:

  • 转到文件中的偏移量 0x3C。那里的四个字节包含 COFF 的偏移量 header(从文件的开头)。
  • 转到上述字段指向的 COFF header,并前进四 (4) 个字节。
  • 以下两 (2) 个字节是机器字段。

可以看到PE结构here. The valid Machine field values are listed here.

编辑: 这是一个未经测试的 C 代码:

int main(int argc, char *argv[]) {
    FILE *f = fopen(argv[1], "rb");
    uint32_t offset = 0;
    fseek(f, 0x3c, SEEK_SET);
    fread(&offset, sizeof(offset), 1, f);
    fseek(f, offset + 4, SEEK_SET);
    uint16_t machine = 0;
    fread(&machine, sizeof(machine), 1, f);
    printf("Machine: 0x%.4x\n", machine);
}

Cygwin file foo.exe will identify file contents based on their file format magic numbers / metadata. (Not their filenames). Presumably also available or installable from source in MinGW, and probably comes with any of the distros for MS's Windows Subsystem for Linux, WSL.

这与 the POSIX file command that most BSD and all Linux distros use. The upstream source is https://www.darwinsys.com/file/

的开源实现相同

https://en.wikipedia.org/wiki/File_(command) 显示示例输出。我的 Linux 桌面上有几个 Windows 可执行文件:

peter@volta:~/.wine/drive_c$ file Program\ Files/Internet\ Explorer/iexplore.exe 
..../iexplore.exe: PE32+ executable (GUI) x86-64, for MS Windows

peter@volta:~/.wine/drive_c$ file Program\ Files\ \(x86\)/The\ Master\ Genealogist\ v9/tmg9.exe 
..../tmg9.exe: PE32 executable (GUI) Intel 80386, for MS Windows

IDK 如果这是 最佳 答案,如果您不经常使用命令行 shell(就像我在 Linux 桌面上所做的那样).


file 适用于几乎任何类型的文件,例如ZIP、JPG、mp4、mkv 和广泛使用的文件格式,它甚至会抓取一些额外的元数据,如 JPG 图像分辨率。 (它不是基于文件名,它打开文件是为了查看元数据。通常前 4 个字节左右是一个 "magic number",表示文件类型。)

对于纯文本格式,它有时可以使用启发式方法来区分 HTML 与纯文本,并识别 UTF-8 与 UTF-16 与 ISO-8851 与纯 ASCII,以及 DOS 与纯文本. Unix 行结尾等。相当不错的程序,不仅适用于可执行文件。

dumpbin /headers

还将显示 CPU 体系结构和可执行文件的大地址感知状态,此工具随 Visual Studio 一起提供并提供以下输出:

Microsoft (R) COFF/PE Dumper Version 14.11.25547.0 Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file C:\Users\justins\projects\random.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
            8664 machine (x64)
               4 number of sections
        5C0BB424 time date stamp Sat Dec  8 04:08:04 2018
               0 file pointer to symbol table
               0 number of symbols
              F0 size of optional header
              22 characteristics
                   Executable
                   Application can handle large (>2GB) addresses

使用 JavaScript 执行此操作的一种非常简单的方法:https://github.com/doctolib/windows-binary-architecture

getTargetArch(yourFilePath, (err, archName, archCode) => {
  // you can check arch name here
}