После наложения защиты VmProtect портится механизм кидания/ловли исключений. Короткий тест приложен в архиве. Исключения создаются, но не долетают до catch-блоков, иногда создание исключений зацикливается до бесконечности. Из нашего приложения удалось поймать кусок стека, когда исключения не ловятся:
В архиве файл test - это скомпилированный тест и защищенный VmProtect’ом, а test.orig - скомпилированный тест, но до защиты. test.orig выполняется нормально, а test падает по Segmentation fault: 11.
Если в файле test.cpp раскомментировать первые строчки с исключениями, то в защищенном примере создание исключений зацикливается.
Версия VmProtect:
VMProtect Professional v 3.4.0 (build 1131) Copyright 2003-2019 VMProtect Software
Версия системы:
System Version: macOS 10.14.5 (18F132), Kernel Version: Darwin 18.6.0
Бинарники перезалил на форум, они 2мя сообщениями ниже
При том что код использующий исключения находится не в _main.
Падает с ошибками Illegal instruction: 4 и Segmentation fault: 11
Проблема сохранилась на 1152 билде, всё так же c упаковкой выбивает “Illegal instruction: 4” и “Segmentation fault: 11” (Случайным образом)
До моего кода исполнение не доходит, без упаковки всё отлично
На всякий случай перезалью бинарники сюда: test_library_macos.tgz (2.66 MB)
Проблема актуальна
Могу наклепать ещё примеров, воспроизводится достаточно просто.
В реальном бинарнике сжатие сильно помогает, т.к имею несколько крупных массивов данных не в ресурсах. Пока перешёл на их сжатие вручную, но приятнее было бы использовать встроенную функцию)