首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >longjmp超出矢量化异常处理程序

longjmp超出矢量化异常处理程序
EN

Stack Overflow用户
提问于 2013-03-14 19:50:41
回答 1查看 320关注 0票数 0

64位Windows程序中的某些类型的事件,例如被零除、空指针引用、堆栈溢出(如果您使用保护页检测到这一点),通常会使用结构化或矢量化异常进行处理(在发现有必要处理它们的程序中)。

在JIT编译器的上下文中,结构化异常稍微有点笨拙,因为需要为所有函数提供展开信息并遵守展开协议,这可能不能与例如移动代码块的复制垃圾收集器很好地交互,这建议使用矢量化异常。

虽然向量化异常处理程序通常会返回,但使用它们来实现此目的将涉及使用longjmp或某些等效代码退出处理程序,这些代码将重置堆栈指针,而不进行任何展开。

这是合法的吗,还是我忽略了什么障碍?

在Unix中,等价物似乎是合法的,就其价值而言:Longjmp out of signal handler?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-15 06:54:28

嗯,在我运行的测试中,它似乎工作得很好。

代码语言:javascript
复制
#include <setjmp.h>
#include <stdio.h>
#include <windows.h>

jmp_buf jmp;

LONG CALLBACK eh(PEXCEPTION_POINTERS e) {
    longjmp(jmp, 1);
}

void main() {
    AddVectoredExceptionHandler(1, eh);
    for (int i = 0; i != 10; ++i)
        if (!setjmp(jmp))
            *(char*)0 = 0;
        else
            puts("ok");
    getchar();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15408451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档