鉴于Windows上的一些Random.exe
,我该如何确定
我可以使用文件浏览器中的属性,其他工具或编程方法吗?
答案 0 :(得分:4)
可执行文件的体系结构写在COFF头的Machine字段中。您可以通过编程方式或使用十六进制编辑器手动检索它:
您可以看到PE结构here。有效的“计算机”字段值在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);
}
答案 1 :(得分:3)
Cygwin file foo.exe
将基于文件格式的幻数/元数据来标识文件内容。 (不是他们的文件名)。大概也可以从MinGW的源中获得或安装,并且可能随WSL的MS's Windows Subsystem for Linux的任何发行版一起提供。
这是大多数BSD和所有Linux发行版使用的the POSIX file
command的开源实现。上游来源是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(如果这是最佳答案),如果您不定期使用命令行外壳程序(例如我在Linux桌面上使用的外壳程序)。
file
适用于几乎所有类型的文件,例如ZIP,JPG,mp4,mkv,对于广泛使用的文件格式,它甚至还可以捕获一些额外的元数据,例如JPG图像分辨率。 (它不是基于文件名的,它会打开文件以查看元数据。通常前4个字节左右是一个“魔术数字”,指示哪种文件。)
对于纯文本格式,有时可以使用试探法来区分HTML与纯文本,并识别UTF-8与UTF-16与ISO-8851与纯ASCII,以及DOS与Unix行尾等。 。相当不错的程序,不仅仅是可执行文件。
答案 2 :(得分:2)
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
答案 3 :(得分:0)
使用JavaScript做到这一点的一种非常简单的方法:https://github.com/doctolib/windows-binary-architecture
getTargetArch(yourFilePath, (err, archName, archCode) => {
// you can check arch name here
}