Protected app crashes when exception is thrown in catch-block

Issues related to VMProtect
Post Reply
sys_dev
Posts: 20
Joined: Tue Sep 03, 2013 8:08 am

Protected app crashes when exception is thrown in catch-block

Post by sys_dev »

Добрый день.

Имеется код, в котором бросается исключение в catch-блоке, окружающем защищенный код. После защиты (только виртуализация) программа падает.

Вот простейший код, на котором проблема воспроизводится:

Code: Select all

#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) и собранные бинари (защищенный и исходный).

Версия компилятора:

Code: Select all

Microsoft (R) C/C++ Optimizing Compiler Version 19.12.25835 for x64
Версия протектора:

Code: Select all

VMProtect Professional v 3.2.0 (build 976) Copyright 2003-2018 VMProtect Software
Attachments
fail-throw-in-catch-binaries.zip
(889.63 KiB) Downloaded 280 times
fail-throw-in-catch.zip
(1.38 KiB) Downloaded 274 times
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Protected app crashes when exception is thrown in catch-block

Post by Admin »

Проверяйте (978 билд):
http://vmpsoft.com/files/VMProtectDemo.exe
sys_dev
Posts: 20
Joined: Tue Sep 03, 2013 8:08 am

Re: Protected app crashes when exception is thrown in catch-block

Post by sys_dev »

Admin wrote:Проверяйте (978 билд):
http://vmpsoft.com/files/VMProtectDemo.exe
Спасибо, приложенный код стал работать. Однако проблема всё ещё осталась.

Если между местом бросания и ловлей есть ещё один (возможно и более) catch-блоков, то код продолжает падать:

Code: Select all

#include <stdio.h>
#include <exception>
#include "VMProtectSDK.h"

void test()
{
    try
    {

VMProtectBeginVirtualization( "" );
        throw std::exception();
VMProtectEnd();

    }
    catch( int )
    {
        printf( "OK - catch( int ) exception correctly!\n" );
        throw 1;
    }
    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;
}
Attachments
fail-throw-in-catch-binaries.zip
(736.77 KiB) Downloaded 267 times
fail-throw-in-catch.zip
(1.15 KiB) Downloaded 279 times
sys_dev
Posts: 20
Joined: Tue Sep 03, 2013 8:08 am

Re: Protected app crashes when exception is thrown in catch-block

Post by sys_dev »

Спасибо, билд 981 правит эту ошибку.

Так получилось, что мы сначала проверили дебажную сборку, в ней ошибка ещё повторяется. На всякий случай приложу собранные бинари этого же кода.

При оптимизации /O2 всё работает корректно. В целом, нам этого достаточно. Ещё раз спасибо за оперативность.
Attachments
fail-throw-in-catch-binaries.zip
(895.53 KiB) Downloaded 254 times
fail-throw-in-catch.zip
(1.4 KiB) Downloaded 250 times
Post Reply