2

在 Android 中,仿生加载器为 statrtup 上的每个进程设置一个默认信号处理程序:

void debugger_init()
{
    struct sigaction act;
    memset(&act, 0, sizeof(act));
    act.sa_sigaction = debugger_signal_handler;
    act.sa_flags = SA_RESTART | SA_SIGINFO;
    sigemptyset(&act.sa_mask);

    sigaction(SIGILL, &act, NULL);
    sigaction(SIGABRT, &act, NULL);
    sigaction(SIGBUS, &act, NULL);
    sigaction(SIGFPE, &act, NULL);
    sigaction(SIGSEGV, &act, NULL);
    sigaction(SIGSTKFLT, &act, NULL);
    sigaction(SIGPIPE, &act, NULL);
}

我想将其设置回默认值,这意味着我想忽略这些信号并且默认处理程序将发生(CORE DUMP)

如何恢复执行的操作?我想忽略所有这些,就好像从未调用过上述函数一样

4

2 回答 2

3

阅读signal(7)sigaction(2),也许还有signal(2)

你可以打电话

signal(SIGILL, SIG_DFL);
signal(SIGABRT, SIG_DFL);

等等main(在动态加载后输入)

您也可以使用sigaction with sa_handler set toSIG_DFL

当然,如果您想在 之前默认处理这些信号main,例如在一些静态构造函数中,事情会更加棘手!

于 2014-07-17T12:46:28.947 回答
0

我发现当混合使用 sigaction 和 signal 来设置一个进程时,它可能会导致意外行为。

于 2018-06-13T20:54:57.890 回答