Closed Mr-JingShi closed 1 year ago
@Mr-JingShi 你说的基本是对的。另外,native crash 兜底模块还需要考虑多线程并发、signal mask 设置、性能等问题,建议直接使用 bytehook 和 shadowhook 的 bytesig 模块,这是一个经过严格测试的、经过线上验证的、可复用的 native crash 兜底模块:
源码: https://github.com/bytedance/bhook/blob/main/bytehook/src/main/cpp/bytesig.h https://github.com/bytedance/bhook/blob/main/bytehook/src/main/cpp/bytesig.c 文档: https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md#native-%E5%B4%A9%E6%BA%83%E5%85%9C%E5%BA%95
另外,关于 xHook 的一些问题,可以参考这里:https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md#xhook-%E7%9A%84%E4%B8%8D%E8%B6%B3%E4%B9%8B%E5%A4%84
@Mr-JingShi 你说的基本是对的。另外,native crash 兜底模块还需要考虑多线程并发、signal mask 设置、性能等问题,建议直接使用 bytehook 和 shadowhook 的 bytesig 模块,这是一个经过严格测试的、经过线上验证的、可复用的 native crash 兜底模块:
源码: https://github.com/bytedance/bhook/blob/main/bytehook/src/main/cpp/bytesig.h https://github.com/bytedance/bhook/blob/main/bytehook/src/main/cpp/bytesig.c 文档: https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md#native-%E5%B4%A9%E6%BA%83%E5%85%9C%E5%BA%95
另外,关于 xHook 的一些问题,可以参考这里:https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md#xhook-%E7%9A%84%E4%B8%8D%E8%B6%B3%E4%B9%8B%E5%A4%84
🙏感谢指导。
xHook在信号处理这块有点问题: xHook针对SIGSEGV做了特殊处理,用来防止自己的core dump扩散到外面。然而外面的信号被xHook捕获到时会调用sigaction把old信号处理函数重新注册成新的信号处理函数------>此操作等同放弃了自己的信号保护机制。
假如APP中存在如同xHook一样的防崩溃保护机制的代码块(库)有两处,我们暂时称呼为xHook和ABC,并假设ABC先注册信号处理函数,xHook后注册信号处理函数,ABC代码块发生崩溃,xHook代码块的信号处理函数捕获到ABC代码块的SIGSEGV,xHook代码块判断不是自己内部的便放弃了自己的信号处理函数并把ABC代码块的信号处理函数注册成新的信号处理函数,最终会触发了ABC的信号处理函数,程序不会崩溃。
程序执行一段时间后,如果xHook代码块发出了SIGSEGV信号,SIGSEGV信号会被ABC的信号处理函数处理,程序就崩溃了。并没有做到杜绝因为xHook崩溃而造成APP崩溃的承诺。
参考Android处理方案,直接调用旧的信号处理函数即可。 https://cs.android.com/android/platform/superproject/+/master:external/gwp_asan/gwp_asan/optional/segv_handler_posix.cpp