Estou tentando iniciar um aplicativo mais antigo no macOS Sierra. Funcionou bem em El Capitan, no entanto, desde a atualização do Sierra, ele falha imediatamente no lançamento com o erro…
Este binário compactado UPX contém um cabeçalho Mach-O inválido e não pode ser carregado.
Usando o Homebrew em El Capitan, instalei o UPX e o usei para tentar descompactar o binário, no entanto, isso me diz que o binário não está compactado em primeiro lugar.
$ 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.
Este é o log de falha ao abrir o aplicativo no 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
Como faço para abrir esse aplicativo no Sierra?
Respostas:
Resposta revisada:
Para ocultar traços, os piratas zeraram os marcadores UPX do binário compactado, por isso não é possível para o macOS Sierra descomprimir o binário. (Tente com:
hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX
e veja que provavelmente não há saída.)No entanto, o jreiser da UPX aceitou o desafio e resolveu esse problema com a implementação de uma pesquisa mais robusta por código compactado. v3.92 será possível fazer com que esses aplicativos sejam executados novamente ao descompactar os executáveis com
upx -d YourApp.app/Contents/MacOS/YourApp
.fonte
3.92-BETA revisão 3 funciona na Sierra e funciona para i386!
jreiser no github.com/upx # 4 comentário
3.92 suporta a compactação de binários no Sierra, para que eles possam ser executados no Sierra, e também suporta a descompactação de binários no Sierra. 3.92-BETA também suporta binários de descompactação que foram modificados após a compactação, como com uma assinatura de código.
Descomprimir o binário do aplicativo usando a
-d
opção funciona muito bem!fonte
-d path
uma vez usando a 3.92-BETAr3 ou posterior para que possam ser executados.trabalhou para mim.
fonte
Não reconheço seu código em particular, embora esse seja um problema comum em uma nova versão do sistema operacional (compatibilidade de software herdada).
Primeiro passo, consulte o site dos desenvolvedores para obter uma indicação de que eles farão o patch para o Sierra. Eles podem ter postado um patch beta que já não está disponível na Atualização de Software.
Envie um e-mail ao desenvolvedor perguntando diretamente a eles. Pode levar algum tempo para serem atualizados, principalmente se eles tiverem vários aplicativos em várias plataformas.
Considere ter um Mac de inicialização dupla. Geralmente, mantenho um clone do meu sistema atual em outra unidade (ou partição) após uma nova instalação do sistema operacional, para que eu possa reiniciar rapidamente e continuar usando o software. Atualmente, mantenho um Mac legado atualmente executando 10.6 e 10.8 apenas para esse suporte.
Considere uma máquina virtual. Você pode usar um emulador no OSX e instalar a versão do sistema operacional de sua preferência (incluindo o Windows). Ainda não sabemos se os emuladores já foram lançados para o Sierra.
fonte
O problema foi relatado como o UPX é muito, muito quebrado pelo Darwin 16 / OS X Sierra. # 4 .
Parece que o upx 3.92 solucionará esse problema.
fonte