【问题标题】:segmentation fault handler crashes with segmentation fault分段错误处理程序因分段错误而崩溃
【发布时间】:2013-06-17 23:42:08
【问题描述】:

我正在使用 arm 机器和分段处理程序有时会在获取崩溃上下文地址时崩溃:

void crit_err_hdlr(int sig_num, siginfo_t * info, void * ucontext)
{
 uintptr_t fault_address = NULL;
 struct sigcontext *ctx = &(((ucontext_t*)ucontext)->uc_mcontext);
 fault_address = ctx->arm_pc;

 //after reading ctx->arm_pc it crashes
}

这是处理程序的设置方式:

struct sigaction sigact = { 0 };
sigact.sa_sigaction = crit_err_hdlr;
sigact.sa_flags = SA_SIGINFO |  SA_RESTART;
if (sigaction(SIGSEGV, &sigact, (struct sigaction *)NULL) != 0)
{
 //error, bail out
}

有什么方法可以检查 sigcontext 中的 arm_pc 是否可读,这样我就可以避免崩溃处理程序中的崩溃?

【问题讨论】:

  • 处理SIGSEGV 至关重要,因为在调用处理程序的那一刻,进程内存管理的所有内容或多或少都可能已经被丢弃。
  • 你在说什么操作系统? Linux、Posix 等?请参阅isbadreadptr on UnixIsBadReadPtr search

标签: c segmentation-fault arm


【解决方案1】:

问题是在处理程序内部执行操作时内存损坏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2014-04-26
    • 2018-11-18
    相关资源
    最近更新 更多