崩溃处理设置:CrashHandlerSetup
1、原理
在堆中为信号处理函数分配一块区域,作为该函数的栈使用,当系统默认的栈空间用尽时,调用信号处理函数使用的栈是在堆中分配的空间,而不是系统默认的栈中,所以它仍旧可以继续工作,执行崩溃处理程序。
崩溃处理使用的LSM(Linux security module)Linux安全模块中yama部分,(函数:prctl(PR_SET_PTRACER…)。Yama主要是对Ptrace函数调用进行访问控制。Ptrace是一个系统调用,它提供了一种方法来让‘父’进程可以观察和控制其它进程的执行,检查和改变其核心映像以及寄存器。 主要用来实现断点调试和系统调用跟踪。利用ptrace函数,不仅可以劫持另一个进程的调用,修改系统函数调用和改变返回值,而且可以向另一个函数注入代码,修改eip,进入自己的逻辑。这个函数广泛用于调试和信号跟踪工具。所以说,对ptrace函数进行访问控制还是很有必要的。
参考博客:https://www.cnblogs.com/0xJDchen/p/6033167.html
2、注册信号处理相关结构体和函数
stack_t ss;
struct sigaction sa;
sigaltstack(&ss, NULL);
sigemptyset(&sa.sa_mask)
sigaction
参考博客:https://my.oschina.net/manmao/blog/692979
3、QtCreator中的源码分析
因为该功能只