Saya mencoba meluncurkan aplikasi yang lebih lama di macOS Sierra. Ini berfungsi dengan baik di El Capitan, namun karena pembaruan ke Sierra langsung macet saat diluncurkan dengan kesalahan ...
Biner terkompresi UPX ini berisi header Mach-O yang tidak valid dan tidak dapat dimuat.
Menggunakan Homebrew di El Capitan, saya menginstal UPX dan menggunakannya untuk mencoba mengompresi biner, namun ini memberitahu saya bahwa biner tidak dikompresi di tempat pertama.
$ 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.
Ini adalah log mogok dari membuka aplikasi di 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
Bagaimana saya bisa membuka aplikasi ini di Sierra?
Jawaban:
Jawaban yang direvisi:
Untuk menyembunyikan jejak, bajak laut memusatkan penanda UPX dari biner yang dikompresi, jadi macOS Sierra tidak dapat mendekompresi biner. (Coba dengan:
hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX
dan lihat, kemungkinan besar tidak ada output.)Namun, jreiser dari UPX menerima tantangan dan mengatasi masalah ini dengan mengimplementasikan pencarian yang lebih kuat untuk kode terkompresi. v3.92 akan memungkinkan aplikasi ini berjalan lagi saat mendekompresi executable
upx -d YourApp.app/Contents/MacOS/YourApp
.sumber
3.92-BETA revisi 3 berfungsi di Sierra dan berfungsi untuk i386!
jreiser di github.com/upx # 4 komentar
3.92 mendukung pemadatan binari di Sierra sehingga dapat dijalankan di Sierra, dan juga mendukung binari yang dikompres di Sierra. 3.92-BETA juga mendukung binari dekompresi yang telah dimodifikasi setelah kompresi seperti dengan tanda tangan kode.
Mengekompresi biner aplikasi menggunakan
-d
opsi ini sangat bagus!sumber
-d path
sekali menggunakan 3,92-BETAr3 atau lebih baru sehingga mereka dapat dijalankan.bekerja untukku.
sumber
Saya tidak mengenali kode Anda khususnya meskipun ini adalah masalah umum dengan rilis OS baru (kompatibilitas perangkat lunak lama).
Langkah pertama, lihat situs web pengembang untuk indikasi mereka akan menambal untuk Sierra. Mereka mungkin telah memasang tambalan beta yang belum tersedia melalui Pembaruan Perangkat Lunak.
Kirim Dev email dan tanyakan langsung kepada mereka. Mungkin perlu waktu bagi mereka untuk mengejar ketinggalan, terutama jika mereka memiliki banyak aplikasi pada banyak platform.
Pertimbangkan memiliki dual boot Mac. Saya biasanya menyimpan klon dari sistem saya saat ini di drive lain (atau partisi) setelah instalasi OS baru, maka saya dapat dengan cepat mem-boot ulang dan terus menggunakan perangkat lunak. Saya benar-benar menjaga Mac lama ini berjalan 10.6 dan 10.8 hanya untuk dukungan ini.
Pertimbangkan mesin virtual. Anda dapat menggunakan emulator di OSX dan menginstal versi OS yang Anda inginkan (termasuk Windows). Namun tidak yakin apakah emulator dirilis untuk Sierra.
sumber
Masalah ini telah dilaporkan sebagai cara UPX, cara rusak oleh Darwin 16 / OS X Sierra. # 4 .
Sepertinya upx 3.92 akan mengatasi masalah ini.
sumber