Я пытаюсь запустить старое приложение в 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
Как я могу открыть это приложение в Sierra?
Пересмотренный ответ:
Чтобы скрыть следы, пираты обнулили маркеры 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-BETA версии 3 работает в Sierra и i386!
https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 теперь работает и для I386.
jreiser на github.com/upx #4 комментарий
3.92 поддерживает сжатие двоичных файлов в Sierra, чтобы их можно было запускать в Sierra, а также поддерживает распаковку двоичных файлов в Sierra. 3.92-BETA также поддерживает распаковку двоичных файлов, которые были изменены после сжатия, например, с помощью подписи кода.
Распаковка двоичного файла приложения с помощью этой -d
опции отлично работает!
$ chmod +x upx.out
$ ./upx.out -d /tmp/Run.app/Contents/MacOS/Run
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2016
UPX 3.92-BETA Markus Oberhumer, Laszlo Molnar & John Reiser Sep 22nd 2016
File size Ratio Format Name
-------------------- ------ ----------- -----------
57444 <- 24576 42.78% macho/i386 Run
Unpacked 1 file.
brew install upx
upx -d YourApp.app/Contents/MacOS/YourApp
работал на меня.
Я не узнаю ваш код, в частности, хотя это обычная проблема с новой версией ОС (совместимость с устаревшим программным обеспечением).
Первый шаг: просмотрите веб-сайт разработчиков, чтобы узнать, что они будут устанавливать исправления для Sierra. Возможно, они уже опубликовали бета-патч, который недоступен через Обновление программного обеспечения.
Отправьте разработчику электронное письмо с вопросом напрямую. Им может потребоваться некоторое время, чтобы наверстать упущенное, особенно если у них есть несколько приложений на разных платформах.
Подумайте о том, чтобы иметь Mac с двойной загрузкой. Обычно я сохраняю клон моей текущей системы на другом диске (или разделе) после установки новой ОС, после чего я могу быстро перезагрузиться и продолжить использовать программное обеспечение. На самом деле, в наши дни я держу устаревший Mac с версиями 10.6 и 10.8 только для этой поддержки.
Рассмотрим виртуальную машину. Вы можете использовать эмулятор на OSX и установить предпочтительную версию ОС (включая Windows). Не уверен, что эмуляторы выпущены для Sierra.
Сообщалось о проблеме, поскольку UPX сильно нарушен Darwin 16 / OS X Sierra. # 4 .
Похоже, что upx 3.92 решит эту проблему.
ɹoƃı
л'л'л
грг