如何在信号处理程序中获取执行上下文?

Met*_*est 3 c linux signals x86-64

illegal operand运行程序时遇到错误.发生崩溃的程序是用汇编语言编写的,并作为目标文件链接,所以我不知道如何使用gdb它.我通过捕获SIGILL信号注意到了这个错误.我想获取有问题的指令的地址.我想到的一种方法是在信号处理程序中获取最后一个执行上下文,并记下rip寄存器的值.我知道上下文传递给信号处理程序,但不知道如何.

Gab*_*ern 5

如果您确实想要遵循信号处理程序路由,那么获取导致信号处理程序运行的指令的地址并不困难.创建信号处理程序时SA_SIGINFO,请在标志设置中设置该位.然后,当您编写处理程序时,它将可以访问siginfo_t包含该字段的结构,该字段si_addr是触发异常的内存位置的地址.