在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)
我如何恢复执行的操作? 我想忽略所有这些,就好像上面的函数从未被调用过一样
读信号(7) , 信号(2)和信号(2) 。
你可以打电话
signal(SIGILL, SIG_DFL); signal(SIGABRT, SIG_DFL);
等等你的main
(这是动态加载后进入)
您也可以使用sigaction
将sa_handler
设置为SIG_DFL
当然,如果你想在你的main
之前默认处理这些信号,比如在一些静态的构造函数中,情况会更加棘手。