首页 > 解决方案 > 如何在异常时检索寄存器值?

问题描述

根据文档,对于 Arm v7a(32 位)平台,当异常被触发时,大多数寄存器都存储在称为内核模式堆栈的东西中。但是,我没有找到任何有关如何从异常处理程序本身访问此堆栈的文档。例如,我可能有

static void sighandlerfunc(int signo, siginfo_t *si, void *uc) {
    DEBUG("at time of exception, pc:[%x],lr:[%x],sp:[%x],fp:[%x]",
      si->si_addr, ??, ??, ??, ??)
}

void register_sa() {
    ...
    sa.sa_flags = SA_SIGINFO|SA_RESTART;
    sa.sa_sigaction = sighandlerfunc;
    sigemptyset(&sa.sa_mask);
    sigaction(SIGVTALRM, &sa, NULL);
}

我如何从异常处理程序中获取这些寄存器的值?

标签: linuxexceptionarm

解决方案


推荐阅读