| Предыдущий | Следующий |
| ERESTART | ELIBSCN |
EBADEXEC
EBADEXEC — ошибка загрузки программ в Darwin. Она означает, что образ, переданный для исполнения, был отклонён как недопустимый исполняемый файл. Это точнее, чем простое обнаружение неожиданного расширения файла, но код сам по себе не определяет отказавший уровень: ядро, средство запуска, динамический загрузчик или высокоуровневый API могут выдавать разные диагностические сообщения для одного и того же артефакта.
Не объединяйте эту ошибку со стандартным случаем ENOEXEC. XNU определяет ENOEXEC как общую «ошибку формата исполняемого файла», а EBADEXEC отдельно — как «недопустимый исполняемый файл». Различие полезно, когда журнал сохраняет числовой Darwin errno: соберите исходный вызов и полный текст ошибки, а не сводите оба результата к одному общему сообщению о повреждении.
Почему файл, похожий на Mach-O, всё равно может быть непригоден
Заголовок Mach-O определяет тип образа. XNU различает перемещаемые объектные файлы, исполняемые файлы со страничной загрузкой по требованию, динамические библиотеки, пакеты и другие типы файлов. Объектный файл или динамическая библиотека не становится автоматически запускаемым основным исполняемым файлом, а исполняемый образ также содержит команды загрузки, описывающие работу, необходимую загрузчику для его запуска.
Целевые проверки
- Определите класс образа командами
file <path>иotool -hv <path>; сохраните их вывод вместе с исходным файлом. - Проверьте команды загрузки с помощью
otool -l <path>, особенно если проблема появилась после упаковки, переписывания двоичного файла или неполного развёртывания. - Отдельно проверьте срезы процессорных архитектур командой
lipo -archs <path>; несовпадение архитектуры представляется кодомEBADARCH, а не этой ошибкой. - Если ошибку вернул
dlopen, немедленно сохраните результатdlerror(). По документации Apple этот API предоставляет строку с описанием последней ошибки динамического загрузчика.
Восстановление исполняемого файла из результатов той же сборки безопаснее, чем редактирование заголовков или команд загрузки Mach-O на месте. Любое исправление следует повторно проверять как полный артефакт приложения вместе с зависимыми библиотеками и политикой подписей.
Ссылки
- Apple XNU: errno.h
- Apple XNU: типы файлов и команды загрузки Mach-O
- Apple: обзор динамических библиотек
- Техническая заметка Apple TN2206: подробное описание подписывания кода macOS
Нужно найти другой код? Найти другой код состояния или ошибки.