Новое падение. Падает на break внутри цикла внутри защищенного кода.
Пример функции, на которой падает.
Code: Select all
#pragma clang optimize off
std::string generateHelloWorld()
{
std::string result;
VMProtectBeginVirtualization( "" );
std::array< unsigned char, 15 > pass;
memcpy( pass.data(), "Hello, World! ", pass.size() );
int length = pass.size();
for( ; length > 0; --length )
{
char c = (char)pass[ length - 1 ];
if( c != ' ' )
{
break;
}
}
result = std::string( (const char*)pass.data(), length );
VMProtectEnd();
return result;
}
#pragma clang optimize on
Та же самая функция, собранная не как addon, а просто command line утилитой не падает.
Если заменить break на bool переменную и проверять её в условии цикла, то тоже не падает.
Флаги компиляции использовались такие:
Code: Select all
-std=c++1z -fpermissive -ffunction-sections -fdata-sections -pthread -msse3 -fno-operator-names -fnon-call-exceptions -fvisibility=hidden -Wno-deprecated-register -m64 -O2 -fno-omit-frame-pointer -fno-strict-aliasing -DNDEBUG
Приложил полный тестовый кейс (требует Node.js) и собранные бинарники (защищённый и просто с маркерами).
Часть crash-report (полный во вложениях):
Code: Select all
Crashed Thread: 0 CrBrowserMain Dispatch queue: com.apple.main-thread
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
Terminating Process: exc handler [0]