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

Что означает Cannot Execute Binary File: Exec Format Error
Ошибка «Cannot Execute Binary File: Exec Format Error» означает, что ядро или оболочка не смогли запустить указанный файл как исполняемый бинарник. Причина обычно в том, что формат или архитектура файла не соответствуют ожидаемым. Коротко:
- Исполняемый файл привязан к CPU-архитектуре и ABI. 32‑битные бинарники отличаются от 64‑битных. ARM отличается от x86/x86_64.
- При запуске ядро проверяет заголовок ELF или другой формат и выбирает подходящий обработчик. Если обработчик отсутствует или заголовок нераспознаваем, появляется упомянутое сообщение.
Важно: сообщение не всегда означает повреждение файла. Это скорее индикатор несовместимости — но также возможны проблемы с правами или целостностью.
Частые причины
- Несовместимая архитектура CPU. Бинарник собран для другой архитектуры (arm, aarch64, i386, x86_64 и т.д.).
- Неподдерживаемый формат файла (не ELF, испорченный заголовок).
- Файл повреждён во время загрузки или копирования.
- Отсутствуют права на исполнение для текущего пользователя.
- Для исполняемого файла требуется внешний интерпретатор или библиотека (например, скрипт с неверной шебанг‑строкой, или бинарник требует определённого динамического загрузчика).
- Окружение или монтирование файловой системы (например, смонтирован как 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. Убедитесь в совместимости архитектур
- Выполните file my_executable и uname -m. Сравните результаты.
- Если архитектуры не совпадают, скачайте версию, собранную для вашей архитектуры, либо используйте эмуляцию/совместимость (см. ниже).
Пример:
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‑подписи.
- Документировать требуемые зависимости и минимальную ОС.
Решение по шагам — краткая методология
- Быстрая проверка: file + uname -m + ls -l.
- Исправление прав или перемещение на exec-файловую систему.
- Проверка целостности и повторная загрузка.
- Установка совместимых библиотек или multiarch.
- При невозможности — эмуляция с 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
Похожие материалы

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

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

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

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

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