在上章里,我们分析了oops的PC值在哪个函数出错的
本章便通过栈信息来分析函数调用过程
1.上章的oops栈信息如下图所示:
9fe0: 代表最初的栈顶SP寄存器位置
9e80:代表函数出错的SP寄存器位置...
2.我们先来分析上图的栈信息,又是怎样的过程呢?...当内核的某个函数出问题时,内核便通过LDMIA,将栈顶sp打印出来,然后栈顶sp+4,直到到达最初的栈顶
2.2我们以下图的3个函数为例:
若c()函数出问题后,内核就会打印b()函数的内容(0x03,...LR), 打印a()函数的内容(0x02,LR),直到sp到达栈顶为止
其中lr值,便代表各个函数的调用关系
3.接下来我们便以上章的oops里的栈信息来分析
在上章里,我们找到PC值bf000078在...3.1先来看first_drv_open()函数,找到STMDB入栈的lr值,来确定被哪个函数调用的
如上图所示,first_drv_open()函数里,通过stmdb sp!