以前我们发现一处panic是非法内存访问。但是发生panic的栈是内核的核心栈。这种地方一般不会出现问题。所以通常我们会怀疑是其它模块的非法内存写入导致破坏了其它数据结构,而引起的panic。对于这种问题,我通常无从下手,主要用排除法,下载一些模块,看看是否ok。但是这种方法效率低下。
今天看到一篇文章,思路非常的好。他判断发生了非法的内存写,大概率是因为使用了memcpy导致,于是它使用jprobe,在memcpy的开始调用处注入一个函数。并且在被非法内存覆盖的地方处添加一个magic。在注入的函数中检测magic是否发生变化,如果变化,则打印调用栈。轻松定位出问题。
参考
https://blog.csdn.net/hjkfcz/article/details/84500026