Гид по технологиям

Как исправить Cannot Execute Binary File: Exec Format Error

7 min read Linux Обновлено 17 Oct 2025
Cannot Execute Binary File — как исправить
Cannot Execute Binary File — как исправить

Отладка: сообщение об ошибке при выполнении бинарного файла

Что означает Cannot Execute Binary File: Exec Format Error

Ошибка: невозможно выполнить бинарный файл — формат исполняемого файла

Ошибка «Cannot Execute Binary File: Exec Format Error» означает, что ядро или оболочка не смогли запустить указанный файл как исполняемый бинарник. Причина обычно в том, что формат или архитектура файла не соответствуют ожидаемым. Коротко:

  • Исполняемый файл привязан к CPU-архитектуре и ABI. 32‑битные бинарники отличаются от 64‑битных. ARM отличается от x86/x86_64.
  • При запуске ядро проверяет заголовок ELF или другой формат и выбирает подходящий обработчик. Если обработчик отсутствует или заголовок нераспознаваем, появляется упомянутое сообщение.

Важно: сообщение не всегда означает повреждение файла. Это скорее индикатор несовместимости — но также возможны проблемы с правами или целостностью.

Частые причины

  1. Несовместимая архитектура CPU. Бинарник собран для другой архитектуры (arm, aarch64, i386, x86_64 и т.д.).
  2. Неподдерживаемый формат файла (не ELF, испорченный заголовок).
  3. Файл повреждён во время загрузки или копирования.
  4. Отсутствуют права на исполнение для текущего пользователя.
  5. Для исполняемого файла требуется внешний интерпретатор или библиотека (например, скрипт с неверной шебанг‑строкой, или бинарник требует определённого динамического загрузчика).
  6. Окружение или монтирование файловой системы (например, смонтирован как vfat без выполнения) блокируют запуск.

Диагностика: какие команды использовать

Начните с простых команд. Они дадут вам ключевые подсказки о причине:

  • Определить тип/архитектуру файла:
file my_executable
  • Узнать архитектуру текущей системы:
uname -m
  • Просмотреть заголовки ELF и требуемые интерпретаторы:
readelf -h my_executable
readelf -l my_executable | grep interp
  • Проверить зависимости динамических библиотек (для ELF‑бинарников):
ldd my_executable
  • Проверить права и режим монтирования:
ls -l my_executable
mount | grep `df --output=target $(dirname my_executable) | tail -1`
  • Проверить контрольную сумму для целостности:
md5sum my_executable
sha256sum my_executable

Если file сообщает, что файл «ELF 32‑bit LSB executable, ARM», а uname -m возвращает x86_64 — очевидна проблема с архитектурой.

Пошаговые решения

Шаг 1. Убедитесь в совместимости архитектур

  1. Выполните file my_executable и uname -m. Сравните результаты.
  2. Если архитектуры не совпадают, скачайте версию, собранную для вашей архитектуры, либо используйте эмуляцию/совместимость (см. ниже).

Пример:

file my_executable
# -> my_executable: ELF 64-bit LSB shared object, x86-64
uname -m
# -> x86_64

Если один из результатов отличается (например, file показывает i386, a uname -m показывает x86_64), переходите к шагу установки совместимости.

Шаг 2. Проверьте целостность файла

Повреждение во время загрузки/копирования может нарушить заголовки ELF. Сравните контрольную сумму с той, что публикует поставщик:

md5sum my_executable
sha256sum my_executable

Если суммы не совпадают — перекачайте файл и проверьте снова.

Важно: если поставщик не публикует контрольную сумму, попробуйте загрузить файл с официального зеркала или проверить подпись (GPG).

Шаг 3. Проверьте права и систему монтирования

Файл должен иметь бит исполнения. Также файловая система должна разрешать исполнение (параметр mount noexec запрещает запуск):

ls -l my_executable
# если нет x — дать:
chmod +x my_executable
./my_executable

Проверьте точки монтирования:

mount | grep $(df --output=target my_executable | tail -1)

Если файловая система смонтирована с noexec — либо переместите файл на другую файловую систему, либо перемонтируйте с exec (требуются права администратора).

Шаг 4. Установите требуемый интерпретатор или библиотеку

Иногда бинарник требует специфичного динамического загрузчика или интерпретатора. Посмотрите секцию interp:

readelf -l my_executable | grep interp

Если в выводе указан нестандартный путь к ld‑so, убедитесь, что он доступен. Для скриптов проверьте первую строку (шебанг):

head -n 1 my_script
# например: #!/usr/bin/env python3

Установите соответствующий интерпретатор (python3, bash и т. п.). Если путь в шебанге некорректен, либо исправьте шебанг, либо запускайте явно: python3 my_script.

Шаг 5. Работа с 32‑битными бинарниками на 64‑битной системе

Для Debian/Ubuntu:

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libstdc++6:i386

Для RHEL/CentOS:

sudo yum install glibc.i686 libstdc++.i686

После установки необходимых библиотек 32‑битный ELF может выполняться как обычный.

Шаг 6. Эмуляция чужой архитектуры (QEMU + binfmt)

Если у вас есть бинарник под ARM на x86‑хосте, и вы не можете получить нативную сборку, используйте QEMU user‑mode или системную эмуляцию:

Для Debian/Ubuntu:

sudo apt-get install qemu-user-static binfmt-support

Это регистрирует интерпретаторы через binfmt_misc, и ядро сможет запускать эмулируемые исполняемые файлы (включая простые ARM/x86 инстанции). Для контейнеров Docker можно использовать qemu‑user‑static и binfmt_misc внутри образа.

Ограничение: эмуляция медленнее и не всегда совместима с низкоуровневыми системными вызовами.

Шаг 7. Проверка на исполняемый скрипт, а не бинарник

Иногда файл не бинарник, а текстовый скрипт без корректного шебанга. Проверьте содержимое:

file my_executable
# -> ASCII text
head -n 5 my_executable

Если это скрипт, добавьте корректный шебанг или запустите скрипт через интерпретатор (bash, python и т. п.).

Когда стандартные решения не помогают — альтернативные подходы

  • Получите исходники и соберите под вашу архитектуру. Это гарантирует рабочую сборку и позволяет применить патчи.
  • Используйте контейнер с нужной архитектурой (например, arm64 контейнер на arm64 хосте или с qemu‑подстановкой).
  • Если это системный утилита, поищите нативный пакет в репозитории вашей дистрибуции.

Чего стоит избегать

  • Не пытайтесь подделывать заголовки ELF или вручную менять ABI — это потенциально опасно и сложноподдерживаемо.
  • Не давайте исполняемые права на бинарники, полученные из ненадёжных источников, без проверки контрольной суммы и происхождения.

Практическая шпаргалка (cheat sheet)

  • Проверка типа файла: file my_executable
  • Системная архитектура: uname -m
  • Права: ls -l; chmod +x my_executable
  • Зависимости: ldd my_executable
  • Заголовки ELF: readelf -h my_executable
  • Контрольные суммы: md5sum/sha256sum
  • Добавить 32‑битную архитектуру (Debian): dpkg –add-architecture i386
  • Эмуляция: apt install qemu-user-static binfmt-support

Таблица совместимости (упрощённая)

  • x86_64 ↔ нативно x86_64
  • i386 (x86) ↔ можно запустить на x86_64 с multiarch/libs
  • armhf/armv7 ↔ требуют ARM‑совместимый хост или эмуляцию
  • aarch64 (ARM64) ↔ требуют ARM64 хост или эмуляцию

Если целевой бинарник отличается по строке ABI/endianness/word size — нативный запуск невозможен без перекомпиляции или эмуляции.

Роль‑ориентированные чек‑листы

Для пользователя:

  • Проверить file и uname -m.
  • Дать права chmod +x.
  • Перекачать файл и сверить контрольную сумму.

Для системного администратора/DevOps:

  • Проверить точки монтирования на noexec.
  • Установить необходимые пакеты (multiarch, glibc.i386, qemu-user-static).
  • Обеспечить снапшот/бэкап перед изменениями в системных библиотеках.

Для разработчика ПО:

  • Предоставлять сборки для целевых архитектур.
  • Публиковать контрольные суммы и, при возможности, GPG‑подписи.
  • Документировать требуемые зависимости и минимальную ОС.

Решение по шагам — краткая методология

  1. Быстрая проверка: file + uname -m + ls -l.
  2. Исправление прав или перемещение на exec-файловую систему.
  3. Проверка целостности и повторная загрузка.
  4. Установка совместимых библиотек или multiarch.
  5. При невозможности — эмуляция с QEMU или пересборка из исходников.

Модели принятия решений (mental models)

  • Совместимость: если архитектуры совпадают, ищите права/интерпретатор/целостность. Если не совпадают — ищите совместимые сборки или эмуляцию.
  • Минимизация риска: сначала проверьте простые и обратимые действия (chmod, перекачивание). Затем переходите к установке библиотек и эмуляции.

Безопасность и доверие

  • Никогда не запускайте бинарники из ненадёжных источников с правами root без проверки. Используйте сашель (sandbox), контейнер или песочницу для проверки неизвестных исполняемых файлов.
  • Проверяйте цифровые подписи и контрольные суммы.

Примеры ошибок и когда они не связаны с форматом

  • Сообщение может появиться, если вы пытаетесь «выполнить» неисполняемый файл через ./file, хотя это файл данных. Решение: открывать файл в редакторе или использовать корректную программу.
  • Если файл — скрипт с CRLF (Windows) концами строк, шебанг может не распознаваться. Исправьте концы строк: dos2unix my_script.

Мерчантилити: таблица решений (коротко)

  • Архитектура не совпадает → загрузить нативную сборку или использовать QEMU/пересборку.
  • Неправильные права → chmod +x.
  • noexec на монтировании → переместить/перемонтировать.
  • Отсутствуют зависимости → установить библиотеки.
  • Повреждение → перекачать и проверить контрольные суммы.

Decision flowchart

flowchart TD
  A[Start: ошибка Exec Format Error] --> B[file + uname -m]
  B --> C{Архитектуры совпадают?}
  C -- Да --> D[Проверить права и монтирование]
  C -- Нет --> E[Искать нативную сборку или эмуляцию]
  D --> F{Файл исполняемый?}
  F -- Нет --> G[chmod +x или переместить]
  F -- Да --> H[Проверить readelf и ldd]
  H --> I{Зависимости в порядке?}
  I -- Да --> J[Проверить целостность и повторно загрузить]
  I -- Нет --> K[Установить недостающие библиотеки]
  E --> L[Установить multiarch или qemu или собрать из исходников]
  G --> H
  J --> End[Проблема решена]
  K --> End
  L --> End

Краткий глоссарий

  • ELF: формат исполняемых файлов в Unix/Linux.
  • ABI: Application Binary Interface — соглашение о вызовах/памяти между компилируемыми компонентами.
  • multiarch: механизм установки библиотек для разных архитектур на одной системе.
  • QEMU user‑mode: эмулятор для запуска бинарников одной архитектуры на хосте другой архитектуры.

Краткое резюме

  • Проверьте архитектуру и тип файла (file, uname -m, readelf).
  • Исправьте простые вещи: права (chmod +x), монтирование, целостность (md5/sha256).
  • Если архитектура не совпадает, используйте multiarch, установите нужные библиотеки или примените QEMU/эмуляцию. При возможности — соберите нативную версию.

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

Если у вас остались вопросы по конкретному бинарнику — приложите вывод команд file, uname -m и ls -l, и я помогу интерпретировать результат.

Ссылки и материалы для дальнейшего чтения

  • Hannah Montana Linux: What is It? Better than other Distro? by J. Shanmugam
  • How to List Groups in Linux? by K. Masoun
  • How to Install and Use iTunes on Ubuntu? by Shruti Gupta
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправление ошибки 0x00000124 в Windows 10
Windows

Исправление ошибки 0x00000124 в Windows 10

Ответы и отложение уведомлений на iPhone
Mobile

Ответы и отложение уведомлений на iPhone

Как посмотреть историю использования Nest Thermostat
Устройства

Как посмотреть историю использования Nest Thermostat

Автоповорот рабочего стола Android в ландшафте
Android.

Автоповорот рабочего стола Android в ландшафте

Unexpected Disconnection в Path of Exile — как исправить
Игры

Unexpected Disconnection в Path of Exile — как исправить

Апгрейд старого Mac: что менять и как
Апгрейд Mac

Апгрейд старого Mac: что менять и как