启动内核,试验
如下图所示,执行错误的应用程序,只打印了各个寄存器值,以及函数调用关系,而没有栈信息:
?...5.接下来,继续修改内核,使应用程序的oops也打印栈信息出来
在驱动的oops里有"Stack: "这个字段,搜索"Stack: "看看,位于哪个函数
5.1如下图所示, 找到位于__die()函数中...接下来我们便通过这个原理,来修改应用程序调用的__do_user_fault()
5.2 在__do_user_fault(),添加以下带加粗的字:
static void __do_user_fault...接下来,便来分析PC值,Stack栈,到底如何调用的
7.首先来分析PC值,确定错误的代码
1)生成反汇编:
arm-linux-objdump -D test_debug > test_debug.dis...,生成的文件会非常大, 好处在于不需要动态链接库,也可以运行
#arm-linux-objdump -D test_debug > test_debug.dis
8.2最终, 找到main()函数的返回地址在