Как определить архитектуру исполняемого двоичного файла в Windows 10 - PullRequest
0 голосов
/ 22 февраля 2019

Учитывая некоторые Random.exe в Windows, как я могу определить

  1. его архитектуру ЦП, например, Intel / ARM, и
  2. его битность, например, 32 или 64.

Есть ли свойство в проводнике, какой-либо другой инструмент или программный метод, который я могу использовать?

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Cygwin file foo.exe идентифицирует содержимое файла на основе их магических чисел / метаданных формата файла.(Не их имена файлов).Предположительно также доступен или устанавливается из источника в MinGW и, вероятно, поставляется с любым дистрибутивом для Подсистемы Windows MS для Linux , WSL.

Это то же самое открытоеисходная реализация команды POSIX file , которую использует большинство BSD и всех дистрибутивов Linux.Восходящий источник - https://www.darwinsys.com/file/

https://en.wikipedia.org/wiki/File_(command) показывает пример вывода.И у меня есть пара исполняемых файлов Windows на моем рабочем столе Linux:

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, если это ответ best , если вы не регулярно используете оболочку командной строки (как яна моем рабочем столе Linux).


file работает практически для любого типа файла, например, ZIP, JPG, mp4, mkv, а для широко используемых форматов файлов он даже получит некоторые дополнительные метаданныекак разрешение изображения JPG.(Он не основан на имени файла, он открывает файл для просмотра метаданных. Обычно первые 4 байта или около того являются «магическим числом», указывающим, какой тип файла.)

Для форматов простого текста этоИногда можно использовать эвристику, чтобы отличить HTML от обычного текста, и распознать UTF-8 против UTF-16 против ISO-8851 против простого ASCII и DOS против концов строк Unix и т. д. Довольно хорошая программа, чтобы иметь вокруг, а нетолько для исполняемых файлов.

0 голосов
/ 28 февраля 2019
dumpbin /headers

также покажет архитектуру ЦП и состояние большого адреса исполняемого файла, этот инструмент поставляется с 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
0 голосов
/ 22 февраля 2019

Архитектура исполняемого файла записана в поле Machine заголовка COFF.Вы можете получить его программно или вручную с помощью шестнадцатеричного редактора:

  • Перейти к смещению 0x3C в файле.Четыре байта содержат смещение заголовка COFF (от начала файла).
  • Перейдите к заголовку COFF, указанному в указанном выше поле, и продвиньтесь на четыре (4) байта.
  • Следующие два (2) байта являются полем Машины.

Вы можете увидеть структуру PE здесь .Действительные значения машинного поля перечислены здесь .

РЕДАКТИРОВАТЬ: Вот код 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);
}
...