Давайте посмотрим на этот код < /p>
void long_jmp();
void set_jmp();
void test()
{
volatile bool f = false;
set_jmp();
//
Нет никаких проверок для if (! f) < /code>, нет никаких условных прыжков.
Я предполагаю, что это ошибка компилятора MSVC. Отдельный вопрос, как в этом случае эта логика?
Real Code, с Winapi < /p>
void test()
{
volatile bool f = false;
CONTEXT ctx;
RtlCaptureContext(&ctx);
if (!f)
{
f = true;
ZwContinue(&ctx, FALSE);
}
}
Функции очень похожи на setjmp и longjmp , но rtlcapturecontext не возвращают значение, поэтому невозможно записать
void jtest()
{
CONTEXT ctx;
if (!RtlCaptureContext(&ctx))
{
ZwContinue(&ctx, FALSE);
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... 4-mode-bug