考虑到捕捉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
}
};
如果可能的话,如何在不使用全局可变状态的情况下,如何使处理程序中的开始和结束可用?