我知道:
当使用和 a (而不是)安装
SIGSEGV
信号处理程序时,信号处理程序会接收 a ,其中的是发生故障的地址。sigaction
sa_sigaction
sa_handler
siginfo_t*
si_addr
使用
ucontext_t
我们可以检查寄存器的值,例如指令指针,尽管不是以独立于平台的方式(Linux 信号处理。如何获取中断指令的地址?)。
我的问题:我们还能知道哪个寄存器导致了错误吗?鉴于我们没有内存到内存的移动,这应该只有一个寄存器(毕竟也只有一个si_addr
)。当然,我可以检查所有寄存器并搜索si_addr
,但可能不止一个匹配项。
我会对不独立于平台的解决方案感到非常满意。