上章链接入口: https://blog.csdn.net/qq_16933601/article/details/104327937
在上章里,我们分析了oops的PC值在哪个函数出错的
本章便通过栈信息来分析函数调用过程...当内核的某个函数出问题时,内核便通过LDMIA,将栈顶sp打印出来,然后栈顶sp+4,直到到达最初的栈顶
2.2我们以下图的3个函数为例:
?
...若c()函数出问题后,内核就会打印b()函数的内容(0x03,LR), 打印a()函数的内容(0x02,LR),直到sp到达栈顶为止
其中lr值,便代表各个函数的调用关系
3.接下来我们便以上章的oops...3.1先来看first_drv_open()函数,找到STMDB入栈的lr值,来确定被哪个函数调用的
?
如上图所示,first_drv_open()函数里,通过stmdb sp!...如上图所示, nameidata_to_filp函数存了6个值,所以,第二个值lr= c0089fb8
4.最终分析出,栈信息的调用过程如下:
ret_fast_syscall()->
sys_open