Добрый день.
Имеется код, в котором бросается исключение в catch-блоке, окружающем защищенный код. После защиты (только виртуализация) программа падает.
Вот простейший код, на котором проблема воспроизводится:
#include <stdio.h>
#include <exception>
#include "VMProtectSDK.h"
void test()
{
try
{
VMProtectBeginVirtualization( "" );
throw std::exception();
VMProtectEnd();
}
catch( const std::exception& )
{
printf( "OK - catch( std::exception ) exception correctly!\n" );
throw std::exception();
}
}
int main()
{
printf( "Test started\n" );
try
{
test();
}
catch( const std::exception& )
{
printf( "OK - catch( std::exception ) exception correctly!\n" );
}
printf( "Test finished\n" );
return 0;
}
Соответственно без защиты всё отрабатывает корректно.
Прикладываю тестовый sample (требуется vs2017) и собранные бинари (защищенный и исходный).
Версия компилятора:
Microsoft (R) C/C++ Optimizing Compiler Version 19.12.25835 for x64
Версия протектора:
VMProtect Professional v 3.2.0 (build 976) Copyright 2003-2018 VMProtect Software
fail-throw-in-catch-binaries.zip (890 KB)
fail-throw-in-catch.zip (1.38 KB)