| Предыдущий | Следующий |
| 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.
Ссылки
- Apple XNU: errno.h
- Apple XNU: заголовки и команды загрузки Mach-O
- Apple: обзор формата исполняемых файлов Mach-O
- Техническая заметка Apple TN2206: подробное описание подписывания кода macOS
Нужно найти другой код? Найти другой код состояния или ошибки.