如何确定 Windows 10 上可执行二进制文件的体系结构
How do I determine the architecture of an executable binary on Windows 10
给定 Windows 上的一些 Random.exe
,我如何确定
- 其 CPU 架构,例如 Intel/ARM,以及
- 它的位数,例如 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
}
给定 Windows 上的一些 Random.exe
,我如何确定
- 其 CPU 架构,例如 Intel/ARM,以及
- 它的位数,例如 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
}