Есть стороннее приложение-сервер, запускаемое в системе как служба.
Я использую VMProtect для защиты разрабатываемых мной dll-плагинов.
Проблема: когда служба использует > 1 запротектированного плагина, то при ручной остановке службы через стандартный Services всплывает ошибка:
Windows could not stop the service on local computer.
Error 1067 the process terminated unexpectedly
Если работает только 1 запротектированный плагин, то служба останавливается нормально.
С чем это может быть связано и как решить данную проблему?
Access violation возникал в секциях vmp в стеке после вызова FreeLibrary.
Выяснилось, что при отключении в опциях “защиты памяти” аварийной остановки службы не наблюдается, тем не менее процесс выгрузки dll занимает достаточно много времени (~30 сек).
Также интересный момент, что при отключении защиты памяти размер файла уменьшается с 3.3 Мб до 1.7Мб - почему защита памяти требует таких ресурсов?
Много ли теряется в отношении протекции при отключении данной опции?
При старте проверяет целостность ReanOnly сегментов образа в памяти.
При работе завиртуализированного кода проверяет случайные участки кода, которые получились в результате защиты программы (пользовательские функции с типами мутация/виртуализация + код VMP рантайма)
Размер таблицы хешей для п. 3 самый большой, т.к. размеры регионов там ограничены в 4К для обеспечения приемлимой скорости.
Дополнительно на размер защищенного файла влияет наличие VMP рантайма (VMProtect добавляет свой собственный код если программа использует функции из SDK/опции “Защита памяти”, “Защита ресурсов” и в меньшей степени “Упаковка файла”).
Access violation возникал в секциях vmp в стеке после вызова FreeLibrary.
Выяснилось, что при отключении в опциях “защиты памяти” аварийной остановки службы не наблюдается
Исправленная версия (619 билд) выслана на емаил, указанный при покупке