Я пытаюсь запустить старое приложение в macOS Sierra. В El Capitan все работало нормально, однако после обновления до Sierra он сразу вылетает при запуске с ошибкой…
Этот сжатый двоичный файл UPX содержит недопустимый заголовок Mach-O и не может быть загружен.
Используя Homebrew в El Capitan, я установил UPX и использовал его, чтобы попытаться распаковать двоичный файл, однако это говорит мне о том, что двоичный файл не сжимается в первую очередь.
$ upx -d /tmp/Run.app/Contents/MacOS/Run
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2013
UPX 3.91 Markus Oberhumer, Laszlo Molnar & John Reiser Sep 30th 2013
File size Ratio Format Name
-------------------- ------ ----------- -----------
upx: /tmp/Run.app/Contents/MacOS/Run: NotPackedException: not packed by UPX
Unpacked 0 files.
Это журнал сбоев при открытии приложения в Sierra.
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: EXEC, [0xc] This UPX compressed binary contains an invalid Mach-O header and cannot be loaded.
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fffcffeabb2 __posix_spawn + 10
1 libsystem_kernel.dylib 0x00007fffcffe5ef2 posix_spawn + 386
2 xpcproxy 0x000000010dbb2d75 0x10dbb0000 + 11637
3 xpcproxy 0x000000010dbb3992 0x10dbb0000 + 14738
4 libdyld.dylib 0x00007fffcfebc255 start + 1
Как я могу получить это приложение, чтобы открыть в Сьерре?
Ответы:
Пересмотренный ответ:
Для сокрытия следов пираты обнулили маркеры UPX из сжатого двоичного файла, поэтому для macOS Sierra невозможно распаковать двоичный файл. (Попробуйте с помощью:
hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX
и увидите, что, скорее всего, нет вывода.)Однако jreiser из UPX принял вызов и решил эту проблему, реализовав более надежный поиск сжатого кода. v3.92 станет возможным снова запустить эти приложения при распаковке исполняемых файлов с помощью
upx -d YourApp.app/Contents/MacOS/YourApp
.источник
3.92-бета-версия 3 работает в Сьерре и работает на i386!
jreiser на github.com/upx # 4 комментария
3.92 поддерживает сжатие двоичных файлов в Sierra таким образом, чтобы их можно было запускать в Sierra, а также поддерживает распаковку двоичных файлов в Sierra. 3.92-BETA также поддерживает распаковку двоичных файлов, которые были изменены после сжатия, например, с помощью сигнатуры кода.
Распаковка двоичного файла приложения с помощью этой
-d
опции прекрасно работает!источник
-d path
помощью одного раза, используя 3.92-BETAr3 или более позднюю версию, чтобы их можно было запустить.работал на меня.
источник
В частности, я не узнаю ваш код, хотя это является распространенной проблемой в новой версии ОС (совместимость с устаревшим программным обеспечением).
Первый шаг, посмотрите на веб-сайте разработчиков для указания, что они будут патчить для Sierra. Возможно, они уже опубликовали бета-патч, который недоступен в обновлении программного обеспечения.
Отправьте разработчику электронное письмо с просьбой напрямую. Это может занять некоторое время, особенно если у них есть несколько приложений на разных платформах.
Рассмотрите возможность использования Mac с двойной загрузкой. Я обычно сохраняю клон моей текущей системы на другом диске (или разделе) после установки новой ОС, затем я могу быстро перезагрузиться и продолжить использовать программное обеспечение. Я на самом деле держу устаревший Mac с 10.6 и 10.8 только для этой поддержки.
Рассмотрим виртуальную машину. Вы можете использовать эмулятор на OSX и установить предпочитаемую версию ОС (включая Windows). Пока не уверен, что эмуляторы выпущены для Sierra.
источник
Сообщалось, что проблема заключается в том, что UPX - это путь, который сломал Darwin 16 / OS X Sierra. # 4 .
Похоже, что upx 3.92 решит эту проблему.
источник