处理特定地址范围内的段错误

时间:2016-08-09 16:26:25

标签: c++ segmentation-fault c++14

考虑到捕捉SIGSEGV的常规设置:

static void handler(int, siginfo_t *si, void*)
{
    printf("SIGSEGV at %p\n", si->si_addr);
}
struct sigaction sa;
sa.sa_flags = SA_SIGINFO;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sigaction(SIGSEGV, &sa, NULL)

如果si_addr存在特定范围,我们怎能抓住?

这是理想的:

sa.sa_sigaction = [start, end](auto&& si){
    if (si->si_addr >= start && si->si_addr <= end) {
        // only then do things
    }
};

如果可能的话,如何在不使用全局可变状态的情况下,如何使处理程序中的开始和结束可用?

0 个答案:

没有答案