Как посмотреть разрядность EXE и DLL файлов в Windows

Способы посмотреть архитектуру исполняемых файлов и DLL в WindowsВ Windows 11/10 современных версий вы можете встретить три основных архитектуры исполняемых файлов и библиотек DLL — x86 (32-бит), x64 (64-бит), ARM64.

В некоторых случаях может потребоваться узнать архитектуру конкретного двоичного файла, не запуская его. В этой инструкции подробно о способах сделать это, если возникла такая необходимость.

Sigcheck

Прежде чем приступить, отмечу, что если речь идёт об EXE-файле программы и вы его уже запустили, достаточно открыть «Диспетчер задач» (правый клик по кнопке «Пуск» — «Диспетчер задач»), перейти на вкладку «Сведения» (Подробности) и посмотреть значение в столбце «Платформа» для соответствующего процесса:

Платформа процесса в диспетчере задач Windows

Если столбец не отображается, нажмите правой кнопкой мыши по заголовку любого столбца и включить отображение в диалоговом окне «Выбрать столбцы».

Один из самых простых способов получения информации о разрядности (архитектуре) исполняемого файла или DLL — утилита Sigcheck из Microsoft Sysinternals. Она предназначена для других целей, но прекрасно подойдёт и для рассматриваемой задачи:

  1. Скачайте Sigcheck с официального сайта и распакуйте в удобное расположение.
  2. Запустите командную строку (от имени администратора, если требуется просмотр информации о файлах в системных папках).
  3. Перейдите в папку с распакованным архивом с помощью команды
    cd путь_к_папке
  4. Введите команду (для запуска в x64 версии Windows)
    sigcheck64 "путь_к_файлу"
    и вы сразу увидите результат, включающий в себя архитектуру файла в поле MachineType: Получение информации об архитектуре в Sigcheck

В архиве также доступны варианты программы для 32-бит систем (sigcheck.exe) и для ARM (sigcheck64a.exe), используйте в команде тот файл, который соответствует установленной на вашем компьютере ОС.

Windows PowerShell

Архитектура исполняемых файлов указывается в их заголовке и потенциально мы можем увидеть эту информацию даже в блокноте или в любом HEX-редакторе. Но проще будет автоматизировать задачу.

Достаточно создать следующий скрипт PowerShell (расширение .ps1, сохранить в кодировке ANSI для правильного отображения русского языка):

Write-Host "=== Определитель архитектуры файлов (EXE/DLL) ===" -ForegroundColor Cyan
Write-Host "Можно просто перетаскивать файлы в это окно." -ForegroundColor Cyan

while ($true) {
    Write-Host "`nВведите путь к файлу (или введите 'Exit' для выхода):" -ForegroundColor White
    $path = Read-Host ">"
    
    if ($path -match "^(?i)exit$") {
        Write-Host "Выход из программы..." -ForegroundColor DarkGray
        break
    }

    $path = $path.Trim('"', "'", " ")

    if (-Not (Test-Path -Path $path -PathType Leaf)) {
        Write-Host "Ошибка: Файл не найден!" -ForegroundColor Red
        continue
    }

    try {
        $stream = [System.IO.File]::OpenRead($path)
        $reader = New-Object System.IO.BinaryReader($stream)

        $stream.Seek(60, [System.IO.SeekOrigin]::Begin) | Out-Null
        $peOffset = $reader.ReadInt32()

        $stream.Seek($peOffset, [System.IO.SeekOrigin]::Begin) | Out-Null
        
        $signature = $reader.ReadUInt32()
        if ($signature -ne 0x00004550) { 
            Write-Host "[-] Это не корректный EXE/DLL файл Windows!" -ForegroundColor Red
            continue
        }

        $machine = $reader.ReadUInt16()

        switch ($machine) {
            0x014C  { Write-Host "[+] Архитектура: 32-bit (x86)" -ForegroundColor Yellow }
            0x8664  { Write-Host "[+] Архитектура: 64-bit (x64)" -ForegroundColor Green }
            0xAA64  { Write-Host "[+] Архитектура: 64-bit (ARM64)" -ForegroundColor Magenta }
            0x01C4  { Write-Host "[+] Архитектура: 32-bit (ARM)" -ForegroundColor DarkYellow }
            0x0200  { Write-Host "[+] Архитектура: 64-bit (Intel Itanium IA-64)" -ForegroundColor Gray }
            default { Write-Host "[?] Архитектура: Неизвестна (Hex-код: 0x$($machine.ToString('X4')))" -ForegroundColor Gray }
        }
    }
    catch {
        Write-Host "[-] Ошибка при чтении файла: $_" -ForegroundColor Red
    }
    finally {
        if ($reader) { $reader.Close() }
        if ($stream) { $stream.Close() }
    }
}

Запустить его и либо указывать пути к файлам, либо просто перетаскивать их на открывшееся окно, получая информацию о разрядности:

Получение сведений об архитектуре в PowerShell

Примечание: если PowerShell не запускает скрипт из-за политики безопасности, введите команду

Set-ExecutionPolicy RemoteSigned

подтвердите выполнение, после чего файлы .ps1 будут исправно запускаться.

Утилита File

И ещё одна простая небольшая утилита для определения типа файлов — File. Версия для Windows доступна для загрузки на этом сайте.

Порядок использования аналогичен таковому для Sigcheck:

  1. Переходим в папку с file.exe, в случае расположения установки по умолчанию команда будет иметь следующий вид:
    cd C:\Program Files (x86)\GnuWin32\bin
  2. Вводим команду
    file "путь_к_интересующему_файлу"
  3. Вывод будет отличаться: для 32-бит файлов вы увидите «PE32 executable», для большинства x64 файлов — «PE32+ executable» (в случае ARM64 также будет указание на архитектуру Aarch64). Дополнительно отображается информация о том, является ли приложение консольным или графическим (GUI) и дополнительная информация: Использование утилиты File

Надеюсь, те, кому требовалась такая информация, смогли найти в материале подходящий для себя способ определения архитектуры, для которой был скомпилирован исполняемый файл Windows.

Оставить комментарий

Интересное
Новое
Список инструкций Windows 11 Windows 10 Подписаться