Что означает код errno 88 (EBADMACHO)?

 
Также может означать:
КонстантаТипОС
ERROR_NET_WRITE_FAULTОшибка WindowsWindows
ENOTSOCKerrnoLinux
EILSEQerrnoSolaris
FTDISK_INTERNAL_ERRORКод BSODWindows
VOLMGRX_INTERNAL_ERRORКод BSODWindows
Предыдущий Следующий
ENOTSOCK EILSEQ

EBADMACHO

EBADMACHO — ошибка загрузки программ Darwin для неправильно сформированного файла Mach-O. Это структурный диагноз: загрузчик не может безопасно интерпретировать образ как предполагаемый объект Mach-O. Ошибка отличается от несовпадения архитектуры и несовместимой версии динамической библиотеки — оба этих случая возможны для правильно сформированного образа.

Для 64-разрядного образа заголовок Mach-O начинается с полей, включающих магическое значение, тип процессора, тип файла, количество команд загрузки и их суммарный размер. После заголовка расположены команды загрузки; каждая содержит тип и размер. XNU также задаёт правила выравнивания и размещения этих структур. Усечение, случайное изменение двоичного файла, ошибочный распаковщик или неполное развёртывание могут сделать поля или смещения несогласованными.

Чего этот код не означает

  • EBADARCH означает, что образ не предоставляет пригодную процессорную архитектуру.
  • ESHLIBVERS относится к проверке версии совместимости зависимой библиотеки.
  • Отклонение при проверке подписи кода или нотариального заверения — отдельный вопрос проверки доверия. Не считайте, что любой сбой запуска с сообщением о подписи означает повреждение образа Mach-O, и наоборот.

Безопасная последовательность диагностики

  • Сохраните точную копию отказавшего файла и вычислите её хеш до замены или изменения; сравните его с исходным артефактом сборки или пакета.
  • Выполните file <path> и otool -l <path>. Отказ анализатора или неправдоподобный вывод команд загрузки является полезным свидетельством; не пытайтесь вручную исправлять байты заголовка.
  • Проверьте каждую переданную, распакованную или обработанную после сборки копию в цепочке развёртывания. Корректный исходный двоичный файл не доказывает идентичность установленного файла.
  • После восстановления заведомо исправного артефакта проверьте весь пакет и его библиотеки, а не только исполняемый файл верхнего уровня.

XNU помечает некоторые команды загрузки как обязательные для исполнения. Если dyld встречает неизвестную обязательную команду, он отклоняет образ, а не игнорирует её. Поэтому важны полный заголовок и весь набор команд загрузки, а не только первые магические байты Mach-O.

Ссылки


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