Что означает код errno 85 (EBADEXEC)?

 
Также может означать:
КонстантаТипОС
ERROR_ALREADY_ASSIGNEDОшибка WindowsWindows
ERESTARTerrnoLinux
ELIBSCNerrnoSolaris
DATA_COHERENCY_EXCEPTIONКод BSODWindows
Предыдущий Следующий
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 на месте. Любое исправление следует повторно проверять как полный артефакт приложения вместе с зависимыми библиотеками и политикой подписей.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.