在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)
如何恢复执行的操作?我想忽略所有这些,好像上面的函数从未被称为
答案 0 :(得分:2)
阅读signal(7),sigaction(2),或许signal(2)。
你可以打电话
signal(SIGILL, SIG_DFL);
signal(SIGABRT, SIG_DFL);
等早期main
(在动态加载后输入)
您也可以sigaction
设置为sa_handler
SIG_DFL
当然,如果你想在main
之前默认处理这些信号,那就更棘手了。在一些静态构造函数中!
答案 1 :(得分:0)
我发现当使用sigaction和signal设置为一个进程进行混合时,它可能会导致意外行为。